определяется вот так
type Functor :: (* -> *) -> Constraint
class Functor f where
fmap :: (a -> b) -> f a -> f b
я успешно имплементировал его для имитации типа Either
data MEither a b = MLeft a | MRight b deriving (Show, Eq, Ord)
instance Functor (MEither a) where
fmap _ (MLeft x) = MLeft x
fmap f (MRight y) = MRight $ f y
Но теперь я хочу сделать ТОЖЕ САМОЕ для моего класса, который упрощенно копирует Functor
type Shower :: (Type -> Type) -> Constraint
class Shower p where
showEither:: p b -> String
С имплементации ТОЧНО ТАКОГО типа MEither
instance Shower (Show a) => (MEither a ) where
showEither = show
я получаю вот такоую ошибку. Хотелось узнать что означает MEither a ? ведь это суммарный тип?
instance Show a => Shower (MEither a)
Обсуждают сегодня