如何在GHCi中定义此函数的等效项(取自learnyouahaskell)?

import Data.List

numUniques :: (Eq a) => [a] -> Int
numUniques = length . nub

如果没有类型声明,GHCi会接受函数定义,但最终会导致无用的类型:
Prelude Data.List> import Data.List
Prelude Data.List> let numUniques' = length . nub
Prelude Data.List> :t numUniques'
numUniques' :: [()] -> Int

结果函数仅接受单位列表作为参数。

有没有办法在GHCi中提供类型声明?还是有另一种方法来定义这些不需要类型声明的函数?

我没有在GHCi指南中看到任何明显的线索,并尝试了以下表达式(无济于事):
> let numUniques' = ((length . nub) :: (Eq a) => [a] -> Int)
> :t numUniques'
numUniques' :: [()] -> Int

最佳答案


let numUniques' :: (Eq a) => [a] -> Int; numUniques' = length . nub



如果使用-XNoMonomorphismRestriction关闭单态性限制,它将推断正确的类型。

10-05 21:25