еще и Semigroup так и должно быть, или я опять делаю ошибки ?
https://play.haskell.org/saved/A1sChdnf
Сейчас в Хаскелле моноид создаётся поверх полугруппы (как и в математике): mappend = (<>). В версии Хаскелля, для которой написан курс, такого ещё не ввели.
код от другой задачи
Странно вот, как я так путаюсь.... https://play.haskell.org/saved/RxfbFv96
дополню чуть-чуть -- современный Хаскель instance Semigroup MyData where (<>) = myAppend instance Monoid MyData where mempty = myEmpty -- старый Хаскель instance Monoid MyData where mappend = myAppend mempty = myEmpty
а вроде минимальное, еще и mconcat ?
а что в документации написано?
ghci> :i Monoid type Monoid :: * -> Constraint class Semigroup a => Monoid a where mempty :: a mappend :: a -> a -> a mconcat :: [a] -> a {-# MINIMAL mempty | mconcat #-}
здесь палка означает "или"
обычно документацию удобно смотреть на сайте https://hackage.haskell.org/package/base-4.20.0.0/docs/Data-Monoid.html#t:Monoid
там вот так написано. ну ок, в данном случае без разницы, но другие вещи удобнее обычно
а там нет minimal definition внезапно
по идее как мне кажеться я написал вариант, который должен работать в обоих случаях
Обсуждают сегодня