1

我正在学习 Haskell,并且一直在尝试部分应用程序。我试图完全应用 sortBy。我不明白结果函数的类型。以及应该如何正确完成?

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

2 回答 2

8

这是因为可怕的单态限制和 ghci 的默认行为。这应该解决它:

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

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

于 2014-06-14T09:50:57.130 回答
4

您正在看到一个工件单态性限制

Prelude Data.List> :set -XNoMonomorphismRestriction 
Prelude Data.List> let mf = sortBy compare
Prelude Data.List> :t mf
mf :: Ord a => [a] -> [a]
于 2014-06-14T09:52:02.417 回答