来自"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 ×1