ghc-exactprint-0.5.3.0: tests/examples/ghc8/ForFree.hs
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
-- {-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
module Control.ForFree where {
-- | Free monad from a functor
;
data Free f x = Pure x | Free (f (Free f x));
deriving instance (Eq (f (Free f a)), Eq a) => Eq (Free f a);
deriving instance (Ord (f (Free f a)), Ord a) => Ord (Free f a);
deriving instance (Read (f (Free f a)), Read a) => Read (Free f a);
deriving instance (Show (f (Free f a)), Show a) => Show (Free f a);
}