我正在學習Haskell,我一直在嘗試部分應用。 我試圖適用於sortBy。我不會拒絕所產生函數的類型。 它應該如何正確完成?部分應用和sortBy
let mf = sortBy compare
:t mf
mf :: [()] -> [()]
我正在學習Haskell,我一直在嘗試部分應用。 我試圖適用於sortBy。我不會拒絕所產生函數的類型。 它應該如何正確完成?部分應用和sortBy
let mf = sortBy compare
:t mf
mf :: [()] -> [()]
這是因爲可怕的monomorphism restriction和ghci的違約行爲。這應該解決這個問題:
λ> :set -XNoMonomorphismRestriction
λ> import Data.List (sortBy)
λ> let mf = sortBy compare
λ> :t mf
mf :: Ord a => [a] -> [a]
簡短的故事,因爲單態的限制是,編譯器將嘗試在函數定義減少到一個單一的類型(在你的情況[()] -> [()]
)。但沒有限制,你會得到一個多態類型(Ord a => [a] -> [a]
)受類型類型限制。
或'讓MF X = sortBy比較x '如果你不想使用'NoMonomorphismRestriction' – user2407038
您正在看到一件神器monomorphism restriction。
Prelude Data.List> :set -XNoMonomorphismRestriction
Prelude Data.List> let mf = sortBy compare
Prelude Data.List> :t mf
mf :: Ord a => [a] -> [a]
的可能重複[什麼是單態的限制?(http://stackoverflow.com/questions/32496864/what-is-the-monomorphism-restriction) – Bakuriu