[Haskell-cafe] Foldable, Traversable and choosing an order
Tom Ellis
tom-lists-haskell-cafe-2017 at jaguarpaw.co.uk
Tue Sep 24 20:30:07 UTC 2019
On Mon, Sep 23, 2019 at 08:05:38PM +0100, Juan Casanova wrote:
> data SOTermPF fn p f = ConstF fn | Proj Int | CompF p [f] deriving Eq
> newtype SOTermF fn f = SOF (SOTermPF fn f f) deriving Eq
>
> My Traversable instance (with comments on intermediate types because
> otherwise it can get pretty obscure):
Everyone else has made good comments, but to add a little and to be a little
more explicit: your data type uses [] so it makes sense to directly inherit
the Traversable (and hence Foldable) instance from that. Your instance was
a little convoluted. Here's what I would suggest:
instance Foldable (SOTermF fn) where
foldMap = foldMapDefault
instance Traversable (SOTermF fn) where
traverse f (SOF (ConstF c)) = pure (SOF (ConstF c))
traverse f (SOF (Proj idx)) = pure (SOF (Proj idx))
traverse f (SOF (CompF g sargs)) =
SOF <$> (CompF <$> f g <*> traverse f sargs)
More information about the Haskell-Cafe
mailing list