真实世界Haskell书:不明白这个例子

Gao*_*Gao 3 haskell functional-programming

在第3章中,有一个名为"MySecond.hs"的例子,我真正不理解的是这样的代码:

safeSecond :: [a] -> Maybe a
Run Code Online (Sandbox Code Playgroud)

它总是在文件的第一行,并删除它不会造成任何麻烦.任何人都可以通过这意味着什么来启发我?我只是任何函数式编程语言的新手.

sto*_*tal 8

它是类型注释.如果你不写它,Haskell会推断它.

在这种情况下,safeSecond是某事物的名称.::将名称与类型分开.它需要一个类型a的列表(a是一个类型变量,这个函数将在任何类型的列表上工作.) - >是函数应用程序,而Maybe a是返回类型.

请注意,'a'表示单个类型,因此如果传入int列表,则必须获得Maybe int out.也就是说,所有类型中的'a'必须同意.

也许只是一种有两种选择的类型只是一个或没什么.


Phy*_*hyx 5

它是函数的类型签名.它旨在显示函数的输入和输出应该是什么/期望的.对于大多数Haskell代码,如果您没有指定它,编译器可以推断它,但强烈建议始终指定它.

除了帮助您记住函数应该实际执行的操作之外,它还是让其他人了解函数功能的好方法.

除此之外,它对调试也很有用,例如当函数的类型不符合您的预期时.如果您有该功能的类型签名,您将在该功能的定义站点上收到错误,如果您没有在该呼叫站点获得一个错误.请参阅类型签名以及为何使用类型签名

此外,由于您正在阅读RWH,因此第2章介绍了这一点.