小编jar*_*vin的帖子

无法推断(Semigroup(可选a))由实例声明的超类引起

来自"Haskell编程:来自第一原理"的以下代码无法编译:

module Learn where
import Data.Semigroup
import Data.Monoid

-- Exercise: Optional Monoid
data Optional a = Nada
                | Only a
                deriving (Eq, Show)

instance Monoid a => Monoid (Optional a) where
 mempty = Nada
 mappend Nada Nada = Nada
 mappend (Only a) Nada = Only $ mappend a mempty
 mappend Nada (Only a) = Only $ mappend mempty a
 mappend (Only a) (Only b) = Only $ mappend a b
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

intermission.hs:11:10: error:
    • Could not deduce (Semigroup (Optional a)) …
Run Code Online (Sandbox Code Playgroud)

haskell

9
推荐指数
2
解决办法
1059
查看次数

标签 统计

haskell ×1