我最近开始尝试通过阅读《LearnYouAHaskell》和来自互联网的随机文章学习Haskell。
我很难理解更复杂的函数类型。
这是我能理解的一些例子。
> :t map
map :: (a -> b) -> [a] -> [b]
它接受一个函数(该函数采用a并输出b,即a和b可以是不同类型的)以及一个a列表,并返回一个b列表。
> :t fst
fst :: (a, b) -> a
输入一个由两个元素组成的元组(允许不同的类型)并返回第一个元素。
> :t any
在更高层次上,我理解
any
。它接受一个函数和一个列表,并在该特定函数的任何列表条目返回true时返回true。我也在Python和JavaScript中使用过它。
问题
我不理解
any :: Foldable t => (a -> Bool) -> t a -> Bool
是如何转化为上面的内容的。(a -> Bool)
是谓词。它接受一个参数并返回true或false。t a -> Bool
是任何结果的布尔值。根据我的理解,t和a代表谓词和列表。为什么它们没有用->
分隔开?
如何理解类型签名以及如何深入挖掘,以便我可以自己处理它们?
(Eq a)
这样封闭的吗? - Abhirath Mahipal[a]
只是将类型构造函数[]
应用于类型变量a
的特殊形式,这使得用变量t
替换文字值[]
更容易理解。 - chepner