我正在学习 Haskell,并且一直在尝试部分应用程序。我试图完全应用 sortBy。我不明白结果函数的类型。以及应该如何正确完成?
let mf = sortBy compare
:t mf
mf :: [()] -> [()]
我正在学习 Haskell,并且一直在尝试部分应用程序。我试图完全应用 sortBy。我不明白结果函数的类型。以及应该如何正确完成?
let mf = sortBy compare
:t mf
mf :: [()] -> [()]
这是因为可怕的单态限制和 ghci 的默认行为。这应该解决它:
λ> :set -XNoMonomorphismRestriction
λ> import Data.List (sortBy)
λ> let mf = sortBy compare
λ> :t mf
mf :: Ord a => [a] -> [a]
短篇小说是由于单态限制,编译器将尝试将您的函数定义减少为单一类型(在您的情况下[()] -> [()]
)。但如果没有限制,您将获得Ord a => [a] -> [a]
受类型类约束的多态类型 ( )。
您正在看到一个工件单态性限制。
Prelude Data.List> :set -XNoMonomorphismRestriction
Prelude Data.List> let mf = sortBy compare
Prelude Data.List> :t mf
mf :: Ord a => [a] -> [a]