Создайте произвольный класс в Scala как экземпляр монады
Чтобы сделать что-либо работоспособным в контексте монады, если вы используете Haskell - я просто добавляю реализацию класса Monad для данного типа в любом месте. Так что я невообще не трогайте источник определения типа данных. Нравится (что-то искусственное)
data Z a = MyZLeft a | MyZRight a
swap (MyZLeft x) = MyZRight x
swap (MyZRight x) = MyZLeft x
instance Monad Z where
return a = MyZRight a
(>>=) x f = case x of
MyZLeft s -> swap (f s)
MyZRight s -> swap (f s)
так что я'не касаясь определения Z, но сделайте его монадой
Как мне сделать это в Scala? Кажется, чтоНет никакого способа, кроме как смешать некоторые черты и определить методы map / flatMap / filter / withFilter? I '