我目前正在学习Haskell,并遇到了使我感到困惑的类型签名。
我知道:
(a -> Bool)
使用(Ord a)时是如何在类型签名中分配谓词,但是我遇到了一个声明为:
的类型签名。(a -> a -> Bool)
根据我在网上发现的信息,这是不等式的类型签名,但是我对它们是否是要为谓词添加不等式感到困惑,即:
(> p x == True)
或者只是为了自己声明不平等。
谢谢。
答案 0 :(得分:4)
当某个函数具有类型签名(a -> Bool)
时,仅表示它采用某个不受约束的类型a
的值并返回一个Bool
,即True
或{{1} }。但是,您可以限制类型变量False
并获得类似a
的信息,它限制多态类型Ord a => a -> Bool
,即a
必须具有类型类的实例a
。
您还可以部分应用功能。例如Ord
,当您将(>) :: Ord a => a -> a -> Bool
部分应用于>
时,您得到5
。这是一个新函数,它需要具有类型类(>5) :: (Ord a, Num a) => a -> Bool
和类型类Ord
的东西,并返回Num
或True
。
要回答您的问题,您当然可以通过将常量应用于另一个函数来创建一个新函数。如果您只想做False
,那么您实际上也不需要==
,请检查数字是否严格大于常数。
f = (>) 5
f 4 -- True
f 5 -- False
我希望这可以帮助您开始使用Haskell。您可能应该阅读一些教程,以获得很好的概述。我可以推荐learn you a haskell。