小编O.P*_*ips的帖子

GHC 7.10.x迁移:为什么不能在实例中写一个"pure = return"Applicative?

我正在阅读一篇关于GHC 7.10.x Migration的文章.有一些修复错误的建议.

GHC说 No instance for (Applicative ...)

如果GHC抱怨这一点

Foo.hs:7:10:没有实例声明的超类引起的(Applicative Foo)实例在'Monad Foo'的实例声明中,修复此错误的一种简单方法是定义一个Applicative(可能还有一个Functor) )instance:instance Functor Foo,其中fmap = liftM - 或者: - fmap = m >> = pure.F

instance Applicative Foo where
    -- NB: DO NOT USE `pure = return`
    pure  = {- move the definition of `return` from the `Monad` instance here -}

    (<*>) = ap  {- defined in Control.Monad -}
    -- or alternatively:
    --  f1 <*> f2 = f1 >>= \v1 -> f2 >>= (pure . v1) …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

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

Haskell:"使用函数产生的模糊类型变量",其中所述变量实际上并不重要

考虑以下功能:

foo :: Show a => Maybe a -> [Char] 
foo (Just x) = show x 
foo Nothing = "Nothing"
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这个功能:

bar :: [Char]
bar = foo Nothing
Run Code Online (Sandbox Code Playgroud)

已传递给参数foo的类型是Maybe a其中a没有指定,而事实上,我们不关心a,因为我们只使用的情况下foo进行的Nothing.但GHC声称提供具体类型:

a0由于使用而产生的模糊类型变量foo
可防止约束(Show a0)被解决.可能的修复:使用类型注释来指定a0应该是什么.

GHC提示指定类型.所以我看到的唯一修复就是创建一个伪类型,它有一个Show类型为class 的实例:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-missing-methods #-}

data Dummy :: *

instance Show Dummy

bar :: [Char]
bar = foo (Nothing :: Maybe …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

3
推荐指数
2
解决办法
87
查看次数

标签 统计

ghc ×2

haskell ×2