Haskell:这个函数的类型是什么?

时间:2010-04-04 22:27:33

标签: haskell ghc

mifun s = foldr op 0 s
          where op x r = head x + r 

有没有办法让ghci告诉我?

2 个答案:

答案 0 :(得分:11)

尝试:t mifun:type mifun的缩写)

给出了

*Main> :t mifun
mifun :: (Num b) => [[b]] -> b

因此,对于b num的{​​{1}}实例,mifun会获取b列表的列表,并输出一个b(在此case是列表中第一个元素的总和。

答案 1 :(得分:2)

这不是一个真正的答案,但我需要格式化。

如果任何包含的列表为空,则

N.B。: mifun为⊥。例如:

> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list

如果您希望上面示例的结果为9(将空列表视为对总和没有贡献),那么您应该将op定义为以下方式之一:

mifun s = foldr op 0 s
          where op []    r = r
                op (x:_) r = x + r 

mifun s = foldr op 0 s
          where op x r = (if null x then 0 else head x) + r 

mifun s = foldr op 0 s
          where op x r = sum (take 1 x) + r 

我可能更喜欢第一个。