How to provide explicit type declarations for functions when using GHCi?

后端 未结 3 1692
轻奢々
轻奢々 2020-12-23 16:03

How to I define the equivalent of this function (taken from learnyouahaskell) inside GHCi?

import Data.List  

numUniques :: (Eq a) => [a] -> Int  
num         


        
相关标签:
3条回答
  • 2020-12-23 16:24

    Note that you can also avoid the monomorphism restriction simply by adding "points" (i.e. explicit variables) back to your expression. So this also gives the correct type:

    let numUniques x = length . nub $ x

    0 讨论(0)
  • 2020-12-23 16:32

    Is there a way provide type declarations in GHCi?

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

    Or is there another way to define functions like these which doesn't require type declarations?

    If you turn off the monomorphism restriction with -XNoMonomorphismRestriction, it will infer the right type.

    0 讨论(0)
  • 2020-12-23 16:40

    The GHC User's Guide shows two additional ways to achieve this. This subsection introduces the :{ ... :} construct, which can be used as follows:

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

    Alternatively, you can enable multiline mode:

    > :set +m
    > let
    | numUniques :: (Eq a) => [a] -> Int
    | numUniques = length . nub
    | 
    
    0 讨论(0)
提交回复
热议问题