Bolognium on Nostr: Consider the following: data ZigZag f g a = Done a | Zig (f (ZigZag f g a)) | Zag (g ...
Consider the following:
data ZigZag f g a
= Done a
| Zig (f (ZigZag f g a))
| Zag (g (ZigZag f g a))
instance (Functor f, Functor g) => Functor (ZigZag f g) where
fmap f (Done a) = Done (f a)
fmap f (Zig fz) = Zig (fmap (fmap f) fz)
fmap f (Zag gz) = Zag (fmap (fmap f) gz)
zagzig :: (Functor f, Functor g) => ZigZag f g a -> ZigZag g f a
zagzig (Done a) = Done a
zagzig (Zig fz) = Zag (fmap zagzig fz)
zagzig (Zag gz) = Zig (fmap zagzig gz)
#haskell
data ZigZag f g a
= Done a
| Zig (f (ZigZag f g a))
| Zag (g (ZigZag f g a))
instance (Functor f, Functor g) => Functor (ZigZag f g) where
fmap f (Done a) = Done (f a)
fmap f (Zig fz) = Zig (fmap (fmap f) fz)
fmap f (Zag gz) = Zag (fmap (fmap f) gz)
zagzig :: (Functor f, Functor g) => ZigZag f g a -> ZigZag g f a
zagzig (Done a) = Done a
zagzig (Zig fz) = Zag (fmap zagzig fz)
zagzig (Zag gz) = Zig (fmap zagzig gz)
#haskell