generated at
GHCのCore言語
GHCのcompile workflowでHaskellコードがまず変換されるIR (中間表現)
構文はとてもsimpleで、10個ほどの値コンストラクタを持ったAST
この観点でHaskellの言語機能をかなり制限したものと捉えることができる
Haskell自体の拡張は継続的にされているが、Core部分は30年弱の歴史でほぼ変わっていないらしい
一方で、型システムにはSystem FCを採用しており、元のHaskellより型機能は豊かになっている
全てに対して型が明示的に指定されているため、推論の必要がなく型検査が高速




概要が掴める
2017年の記事なので細かいところは古くなっていたりする
大枠を掴むには問題ないと思うmrsekut
記事中で触れている CoreSyn (CoreのSyntax)というmoduleは9.2.1ではないっぽいmrsekut
同様のものがGHC.Coreに入ってるっぽい




小さな構文
hs
data Expr b = Var Id | Lit Literal | App (Expr b) (Arg b) | Lam b (Expr b) | Let (Bind b) (Expr b) | Case (Expr b) b Type [Alt b] | Cast (Expr b) CoercionR | Tick CoreTickish (Expr b) | Type Type | Coercion Coercion deriving Data type Arg b = Expr b data Alt b = Alt AltCon [b] (Expr b) deriving (Data) data AltCon = DataAlt DataCon | LitAlt Literal | DEFAULT deriving (Eq, Data) data Bind b = NonRec b (Expr b) | Rec [(b, (Expr b))] deriving Data
GHC.Coreで定義されている
全て型がついているため高速に型検査ができる
既に推論済みなので検査が高速


どのように変換されるか
いくつかの変換例が紹介されている
(+) とか (.) のような演算子も全部前置される


変換過程を自分で見る
{-# OPTIONS -ddump-splices -ddump-to-file -dsuppress-all #-} を追加してbuildする
--ddump-prep
-ddump-simpl
中間core?




STGについての発表だが、序盤でCoreについても触れている