pandora-0.4.6: Pandora/Paradigm/Primary/Transformer/Jet.hs
{-# LANGUAGE UndecidableInstances #-}
module Pandora.Paradigm.Primary.Transformer.Jet where
import Pandora.Pattern.Functor.Covariant (Covariant ((-<$>-)), (-<$$>-))
import Pandora.Pattern.Functor.Traversable (Traversable ((<<-)), (-<<-<<-))
import Pandora.Paradigm.Primary.Algebraic ((-<*>-))
data Jet t a = Jet a (Jet t (t a))
instance Covariant (->) (->) t => Covariant (->) (->) (Jet t) where
f -<$>- Jet x xs = Jet (f x) (f -<$$>- xs)
instance Traversable (->) (->) t => Traversable (->) (->) (Jet t) where
f <<- Jet x xs = Jet -<$>- f x -<*>- f -<<-<<- xs