让我们看看在 Haskell 中用于处理反向列表的新数据类型的声明:
import Data.Monoid
data RevList a = Nil | RCons (RevList a) a deriving (Eq, Show)
instance Monoid a => Monoid (RevList a) where
mempty = Nil
instance Semigroup a => Monoid (RevList a) where
Nil <> RCons (RevList a) a = RCons (RevList a) a
RCons (RevList a) a <> RNil = RCons (RevList a) a
Nil <> Nil = Nil
我困扰的问题是编译失败,描述如下:
`<>' is not a (visible) method of class `Monoid'
首先,我尝试在没有任何 Semigroup 实例声明的情况下创建一个 Monoid 实例,但在阅读此问题后导致了另一个失败。那么,当前的东西中的 '<>' 有什么问题呢?可以肯定的是,我知道缺少像 mappend 或 mconcat 这样的 Monoid 函数作为强制添加到 Monoid 实例代码中。