Free型
from Freeモナド
定義
code:purs(hs)
data Free f a = Pure a
| Join (f (Free f a))
Free型はMonadをdata構造として表現したものである
データ型の定義自体にはfにFunctorの制約はない
f :: * -> *ではある
Joinの部分の値コンストラクタにもFreeという名前を使うことが多いが、分かりづらいmrsekut.icon
型コンストラクタと値コンストラクタの名前の重複によって再帰が見づらい
Monadとなる条件とのアナロジーがわかりづらい
だから、PureとJoinという名前を使ったほうが親切だと思うmrsekut.icon