Haskell中的类型推断有一点学习曲线(至少可以说!).开始学习它的一个好方法是使用简单的例子.因此,以下是类型推断的"hello world".
请考虑以下示例:
Prelude> :t 3
3 :: (Num t) => t
Prelude> let x = 3
Prelude> :t x
x :: Integer
Run Code Online (Sandbox Code Playgroud)
问题是:为什么3和x有不同的类型?
链接摘要:
阅读以下答案的完整故事; 这里只是一个链接摘要:
在回答有关stackoverflow的问题时,我注意到GHCi(交互式)在let语句中分配了一个限制性太强的类型.即,给定代码,
import Control.Arrow
f = maximum &&& id >>> fst &&& (\(m,l) -> length $ filter (==m) l)
Run Code Online (Sandbox Code Playgroud)
(作为我的回答对/sf/ask/439726941/#6283594),如果一次性插入"让"之前f和在ghci中输入它,它提供以下类型信息
Prelude Control.Arrow> :t f
f :: [()] -> ((), Int)
Run Code Online (Sandbox Code Playgroud)
而只是要求表达式的类型给出正确的结果,即Ord a => [a] -> (a, Int).我正在使用ghc 7.0.3.