Phantom Type
Phantom type (幽霊型) をチラッと学んだのでメモ。きっかけは Gentrification gone too far? affordable 2nd-class values for fun and (co-)effect を読んでいるときに出てきたこと。
静的な型を持つ言語で使うテクニックで登場する型(パラメータ)のことをphantom typeという。
-- このaがphantom type
data Com a = String
type First ()
type Second ()
type Third ()
init :: String -> Com First
next :: Com First -> Com Second
final :: Com Second -> Com Third
init -> next -> finalの順で呼ぶことになる。それ以外の順番では型検査を通せない。線形型とかGADTとかと組み合わせるともっとリッチなことをできるだろう。セッションタイプを似たような概念として聞いたことがある。どのように関係があるのだろうか。
Jane Street のテックブログでphantom typeをYaron Minskyが紹介していた。 readonly/readwrite/immutableみたいなアクセス制御を実現する方法を例として紹介している。