> {-# LANGUAGE TemplateHaskell, FlexibleInstances #-}
> module Control.CCA 
>   ((>>>), (<<<), first, second, (***), (&&&), loop, 
>    Arrow, ArrowLoop, ArrowInit, 
>    arr, init, arr', init', constant,
>    norm, normOpt) where
> import Control.Arrow hiding (arr, returnA)
> import Control.CCA.Types hiding (init)
> import Control.CCA.CCNF
> import Language.Haskell.TH
> import Language.Haskell.TH.Syntax
> import Language.Haskell.TH.Instances
> import Prelude hiding (init)
> arr :: ExpQ -> ExpQ
> arr e = appE [|arr' e|] e
> init :: ExpQ -> ExpQ
> init i = appE [|init' i|] i
> constant :: (ArrowInit a, Lift b) => b -> a () b
> constant c = arr' [|const c|] (const c)