ajhc-0.8.0.1: src/Support/FreeVars.hs
module Support.FreeVars where
import Data.Monoid
class Monoid b => FreeVars a b where
freeVars :: a -> b
instance Monoid x => FreeVars () x where
freeVars () = mempty
instance (FreeVars x b, FreeVars y b) => FreeVars (x,y) b where
freeVars (x,y) = freeVars x `mappend` freeVars y
instance (FreeVars x b, FreeVars y b, FreeVars z b) => FreeVars (x,y,z) b where
freeVars (x,y,z) = freeVars x `mappend` freeVars y `mappend` freeVars z
instance FreeVars a b => FreeVars [a] b where
freeVars as = mconcat (map freeVars as)
instance FreeVars a b => FreeVars (Maybe a) b where
freeVars (Just x) = freeVars x
freeVars Nothing = mempty
instance (FreeVars x b, FreeVars y b) => FreeVars (Either x y) b where
freeVars (Left x) = freeVars x
freeVars (Right y) = freeVars y