Hatena::Grouphaskell

猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 このページをアンテナに追加 RSSフィード

2013-03-29

サンク メモ

| 16:29 | サンク メモ - 猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 のブックマークコメント

Haskellで書いてもしょうがないのであとでF#にするか?

正格評価の言語だとunitがアウトだなきっと。最初から() -> a で渡してやらないと。

newtype Thunk a =  T (() -> a)
unit            :: a -> Thunk a
unit x          =  T (\y -> x)
eval            :: Thunk a -> a
eval (T x)      =  x ()
apply           :: (Thunk (Thunk a -> b)) -> Thunk a -> Thunk b
apply f x       =  unit (eval f x)

 1
two = unit 2
add = unit (\x -> \y -> eval x + eval y)
three = add `apply` one `apply` two