Bol*_*boa 5 haskell type-declaration
这可能是一个非常基本的问题,但是,它似乎没有涵盖在SO上.
我最近接受了Haskell,直到现在,类型声明主要包括以下内容:
Int
Bool
Float
etc, etc
Run Code Online (Sandbox Code Playgroud)
现在我进入列表,我看到使用的类型声明a,例如在以下函数中迭代关联列表:
contains :: Int -> [(Int,a)] -> [a]
contains x list = [values | (key,values)<-list, x==key]
Run Code Online (Sandbox Code Playgroud)
有人可以解释这a是什么,以及它是如何工作的?从观察来看,它似乎代表了每一种类型.这是否意味着我可以输入任何类型的任何列表作为参数?
psm*_*ars 12
是的,你是对的,它代表"任何类型" - 限制是a指定类型签名中的所有s必须解析为相同类型.因此,您可以输入任何类型的列表,但是当您使用contains查找列表中的值时,您查找的值必须与列表中的元素的类型相同 - 这当然是有意义的.