GHCのCore言語
構文はとてもsimpleで、10個ほどの値コンストラクタを持ったAST
この観点でHaskellの言語機能をかなり制限したものと捉えることができる
Haskell自体の拡張は継続的にされているが、Core部分は30年弱の歴史でほぼ変わっていないらしい
一方で、型システムには
System FCを採用しており、元のHaskellより型機能は豊かになっている
全てに対して型が明示的に指定されているため、推論の必要がなく型検査が高速
概要が掴める
2017年の記事なので細かいところは古くなっていたりする
大枠を掴むには問題ないと思う

記事中で触れている
CoreSyn
(CoreのSyntax)というmoduleは9.2.1ではないっぽい

小さな構文
hsdata 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
全て型がついているため高速に型検査ができる
既に推論済みなので検査が高速
どのように変換されるか
いくつかの変換例が紹介されている
(+)
とか (.)
のような演算子も全部前置される
変換過程を自分で見る
{-# OPTIONS -ddump-splices -ddump-to-file -dsuppress-all #-}
を追加してbuildする
--ddump-prep
-ddump-simpl
中間core?
STGについての発表だが、序盤でCoreについても触れている