私はハスケルに教会の数字を実装しようとしていますが、私は軽度の問題にぶつかりました。私が試してみて、減算を行うとき> T2haskellの教会数字の減算
- >(T1 - - > T2)T =( - > T1 T):無限の種類を構築することができません:Haskellはチェックを発生
で無限の種類を訴えます。私のラムダ計算が有効であると私は99%肯定的です(そうでなければ教えてください)。私が知りたいのは、自分の仕事でハスケルを働かせるためにできることがあるかどうかです。
module Church where
type (Church a) = ((a -> a) -> (a -> a))
makeChurch :: Int -> (Church a)
makeChurch 0 = \f -> \x -> x
makeChurch n = \f -> \x -> f (makeChurch (n-1) f x)
numChurch x = (x succ) 0
showChurch x = show $ numChurch x
succChurch = \n -> \f -> \x -> f (n f x)
multChurch = \f2 -> \x2 -> \f1 -> \x1 -> f2 (x2 f1) x1
powerChurch = \exp -> \n -> exp (multChurch n) (makeChurch 1)
predChurch = \n -> \f -> \x -> n (\g -> \h -> h (g f)) (\u -> x) (\u -> u)
subChurch = \m -> \n -> (n predChurch) m
型宣言「型教会a =(a-> a) - > a-」を作成する必要があります。そのクリーナー、違いはありません。 – alternative
また、タイプシグネチャを書き出すのに役立ちます。それは問題がどこにあるのかを正確に教えてくれるでしょう... – alternative
ghciが適切に推論できるかどうかを調べるためにタイプシグネチャを削除してしまい、うまくいけばエラーを取り除きます(エラーは変更されていません)...また、私型の周りのかっこを好むそれはそれが私にとってもっと目立つようにします – Probie