如何在使用GHCi时为函数提供显式types声明?

如何在GHCi中定义这个函数的等价物(取自learnyouahaskell )?

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

如果没有types声明,GHCi接受函数定义,但是最后是一个无用的types:

 Prelude Data.List> import Data.List Prelude Data.List> let numUniques' = length . nub Prelude Data.List> :t numUniques' numUniques' :: [()] -> Int 

结果函数只接受一个单位列表作为参数。

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

我没有看到GHCi指南中的明显线索,并尝试使用下列expression式(无效):

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

GHCi中有没有提供types声明的方法?

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

还是有另一种方法来定义这些不需要types声明的函数?

如果closures-XNoMonomorphismRestriction的单态限制,它将推断正确的types。

请注意,您也可以简单地通过向expression式添加“点”(即显式variables)来避免单态的限制。 所以这也给出了正确的types:

让numUniques x = length。 nub $ x