我正在学习Haskell,我一直在尝试部分应用。 我试图适当地应用sortBy。我没有看到结果函数的类型。 它应该如何正确地完成?
let mf = sortBy compare
:t mf
mf :: [()] -> [()]
答案 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]