以上是我遇到问题的问题。它要求我给出一个类型并定义一个非中缀函数。
所以我的方法是使用模式匹配。
这个想法是采取两个布尔值,然后通过模式
xor :: bool -> bool -> bool
xor True True == False
xor True False == True
xor False True == True
xor False False == False
我收到编译错误。
Parse error: naked expression at top level
Perhaps you intended to use TemplateHaskell
有人可以告诉我这里我做错了什么以及如何解决它?
非常感谢。
答案 0 :(得分:3)
请考虑阅读基本的haskell教程 - 例如learnyouahaskell.com。
类型是用大写的情况编写的,==
运算符不是赋值,而是测试相等
xor :: Bool -> Bool -> Bool
xor True True = False
xor True False = True
xor False True = True
xor False False = False
还要注意,这可以简化为
xor x y = x /= y
毕竟它只是检查你传入的两个值是不一样的。
甚至更多
xor = (/=)
此样式称为无点,这意味着如果类型签名是明确的,则不需要参数(有时由于历史/数学原因,参数被称为点)。
顺便说一句,如果你想知道TemplateHaskell
是什么 - 它是GHC的编译器扩展,它允许你编写在编译时创建haskell代码的代码 - 然后再进行类型检查和编译 - 我将其视为类型安全的元编程。