小编sim*_*uff的帖子

函数签名如何匹配请求的类型

我试图了解这是如何工作的; 在GHCi中:

foldMap (+3) (Just 5) :: Sum Int
Run Code Online (Sandbox Code Playgroud)

产生结果

Sum {getSum = 8}
Run Code Online (Sandbox Code Playgroud)

现在,foldMap的类型是

foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
Run Code Online (Sandbox Code Playgroud)

从该类型中,foldMap使用的函数的签名与使用函数的签名(+3)不匹配:

(+3) :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)

VS

f :: Monoid m => a -> m
Run Code Online (Sandbox Code Playgroud)

如果我也尝试这样的事情:

foldMap _ (Just 5) :: Sum Int
---------------------------------------
<interactive>:113:9: error:  
* Found hole: _ :: Integer -> Sum Int  
* In the first argument of `foldMap', namely `_'  
  In the expression: …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference

4
推荐指数
1
解决办法
74
查看次数

尝试使用幺半群函子的应用实例

我正在学习 Haskell 并尝试从《Haskell 编程从第一原理》一书中进行练习,并且我正在尝试编写 Pair 类型的应用程序

 data Pair a = Pair a a deriving Show
Run Code Online (Sandbox Code Playgroud)

我在网上看到了一些其他示例,但我正在尝试一些不同的应用函子,我正在尝试利用这种类型的幺半群结构。这是我所拥有的

data Pair a = Pair a a deriving (Show, Eq)

instance Functor Pair where
     fmap f (Pair x y) = Pair (f x) (f y)

instance Semigroup a => Semigroup (Pair a) where
    (Pair x y) <> (Pair x' y') = Pair (x <> x') (y <> y')

instance Applicative Pair where
    pure x = Pair x x 
    (Pair f g) <*> p = …
Run Code Online (Sandbox Code Playgroud)

haskell applicative monoids

1
推荐指数
1
解决办法
411
查看次数

标签 统计

haskell ×2

applicative ×1

monoids ×1

type-inference ×1