我正在尝试写出一些 lambda 演算,但我无法让教堂条件起作用。我可能应该说我是一个 Haskell 菜鸟。
我已经在网上和 SO 上查看了解决方案,但它们都涉及引入新类型和其他技巧,但我希望尽可能接近原始语法。例如:
tru :: Integer -> Integer -> Integer
tru = \x -> \y -> x
fals :: Integer -> Integer -> Integer
fals = \x -> \y -> y
main = do
print (tru 2 3)
print (fals 5 6)
匹配教堂布尔值的确切语法:
\a.\b.a
\a.\b.b
有什么方法可以匹配教堂 if/else 的确切语法?我正在尝试复制\p.\a.\b.p a b
,但我不确定我做错了什么:
ifelse :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer
ifelse = \p -> \a -> \b -> p -> a -> b
main = do
print (tru 2 3)
print (fals 5 6)
print (ifelse tru 42 58)