> {-# LANGUAGE CPP #-}
> module Control.CCA.Types where
#if __GLASGOW_HASKELL__ >= 610
> import Control.Category
#endif
> import Control.Arrow 
> import Language.Haskell.TH
> import Prelude hiding (init)
> class (Arrow a, ArrowLoop a) => ArrowInit a where
>   init :: b -> a b b
>   arr' :: ExpQ -> (b -> c) -> a b c
>   arr' _ = arr
>   init' :: ExpQ -> b -> a b b
>   init' _ = init
>   loopD :: e -> ((b, e) -> (c, e)) -> a b c 
>   loopD i f = loop (arr f >>> second (init i))