Haskell中的类型和定义

时间:2016-05-01 12:11:29

标签: haskell

Question

以上是我遇到问题的问题。它要求我给出一个类型并定义一个非中缀函数。

所以我的方法是使用模式匹配。

这个想法是采取两个布尔值,然后通过模式

 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

有人可以告诉我这里我做错了什么以及如何解决它?

非常感谢。

1 个答案:

答案 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代码的代码 - 然后再进行类型检查和编译 - 我将其视为类型安全的元编程。