部分应用和sortBy

时间:2014-06-14 09:42:23

标签: haskell partial-application

我正在学习Haskell,我一直在尝试部分应用。 我试图适当地应用sortBy。我没有看到结果函数的类型。 它应该如何正确地完成?

let mf = sortBy compare
:t mf
mf :: [()] -> [()]

2 个答案:

答案 0 :(得分:8)

这是因为可怕的monomorphism restriction和ghci的默认行为。这应该解决它:

λ> :set -XNoMonomorphismRestriction
λ> import Data.List (sortBy)
λ> let mf = sortBy compare
λ> :t mf
mf :: Ord a => [a] -> [a]

短篇小说由于单形限制,编译器会尝试将函数定义减少为单一类型(在您的情况下为[()] -> [()])。但是没有限制,你会得到一个受类型类约束的多态类型(Ord a => [a] -> [a])。

答案 1 :(得分:4)

您正在看到monomorphism restriction

的工件
Prelude Data.List> :set -XNoMonomorphismRestriction 
Prelude Data.List> let mf = sortBy compare
Prelude Data.List> :t mf
mf :: Ord a => [a] -> [a]