2017-08-02 41 views
0

我具有以下例如相pure功能:混淆关于适用函子纯

Prelude> :t pure ((+1) 1) 
pure ((+1) 1) :: (Num a, Applicative f) => f a 

什么是上述包裹a具体类型的f

例如,f(结构)是这里有可能:

Prelude> pure ((+1) 1) :: Maybe Int 
Just 2 

,什么是结构:

pure ((+1) 1) 

第二个例子:

Prelude> :t pure ((+1) 1) :: [Int] 
pure ((+1) 1) :: [Int] :: [Int] 

为什么GHCI显示型的两倍,即不仅:: [Int]:: [Int] :: [Int]

+0

我不明白你的第一个问题。至于第二个:GHCi简单地回应你询问的表达式('pure((+1)1):: [Int]'),然后用推断的类型(在这种情况下无聊,因为你已经已经明确写出了你想要的类型,导致签名的确切重复)。 – leftaroundabout

+0

我编辑了我的帖子。谢谢 –

回答

4
  1. fa都是类型变量。没有具体的类型。它将使用周围环境所需的任何类型。

  2. 当您键入:t EXPR时,ghci将打印类型为EXPR :: TYPE。第一个:: [Int]是您键入的表达式的一部分;第二个:: [Int]是由ghci计算的类型。