如何在使用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