关于Haskell中的类型

Friday, 5. January 2007, 15:39:47

Haskell的类型独特,变化较多,第一次接触感觉确实有点摸不到头脑。

:t命令用来查看变量/函数/表达式的类型,比如:

:t “hello”
“hello” :: [Char]

“hello”是由Char类型组成的List。

:t tail
tail :: [a] -< [a]

-<前面的是函数接收的参数类型,后面的是返回值类型。上面表明tail可以接收任何类型,并且返回一个同类型的值。
这很容易理解,比如:
tail [1,2,3,4]

就得到:

[2,3,4]

tail "hello"也可以,就能得到:

“ello”

这是简单的情况,下面看个稍微复杂的:

假设函数f的类型是Float -< Float,也就是说它接收一个Float参数,并返回Float值,这和C/C++还不一样,因为Haskell是functional语言,所以Float -< Float只能单纯地做数值计算,换句话说,就是不能做一些额外的其他东西,比如打印最后的结果。

现在,我们想要f计算并打印出结果,那么f的类型就变了,就应该是:
Float -< (Float,String)