homoiconic-0.1.2.0: Constructs FAlgebras from typeclasses, making Haskell functions homoiconic

Safe HaskellNone
LanguageHaskell2010

Homoiconic.Homogeneous

Contents

Synopsis

FAlgebra

class (Functor (Sig alg), Foldable (Sig alg), Typeable alg) => FAlgebra alg where Source #

Minimal complete definition

runSig

Associated Types

type ParentClasses alg :: [Type -> Constraint] Source #

data Sig alg a Source #

Methods

runSig :: alg a => Sig alg a -> a Source #

Instances

FAlgebra Eq Source # 

Associated Types

type ParentClasses (Eq :: Type -> Constraint) :: [Type -> Constraint] Source #

data Sig (Eq :: Type -> Constraint) a :: * Source #

Methods

runSig :: Eq a => Sig Eq a -> a Source #

FAlgebra Floating Source # 

Associated Types

type ParentClasses (Floating :: Type -> Constraint) :: [Type -> Constraint] Source #

data Sig (Floating :: Type -> Constraint) a :: * Source #

Methods

runSig :: Floating a => Sig Floating a -> a Source #

FAlgebra Fractional Source # 

Associated Types

type ParentClasses (Fractional :: Type -> Constraint) :: [Type -> Constraint] Source #

data Sig (Fractional :: Type -> Constraint) a :: * Source #

Methods

runSig :: Fractional a => Sig Fractional a -> a Source #

FAlgebra Num Source # 

Associated Types

type ParentClasses (Num :: Type -> Constraint) :: [Type -> Constraint] Source #

data Sig (Num :: Type -> Constraint) a :: * Source #

Methods

runSig :: Num a => Sig Num a -> a Source #

FAlgebra Ord Source # 

Associated Types

type ParentClasses (Ord :: Type -> Constraint) :: [Type -> Constraint] Source #

data Sig (Ord :: Type -> Constraint) a :: * Source #

Methods

runSig :: Ord a => Sig Ord a -> a Source #

data Free f a where Source #

Constructors

Free :: f (Free f a) -> Free f a 
Pure :: a -> Free f a 

Instances

Functor f => Functor (Free f) Source # 

Methods

fmap :: (a -> b) -> Free f a -> Free f b #

(<$) :: a -> Free f b -> Free f a #

(Functor f, Foldable f) => Foldable (Free f) Source # 

Methods

fold :: Monoid m => Free f m -> m #

foldMap :: Monoid m => (a -> m) -> Free f a -> m #

foldr :: (a -> b -> b) -> b -> Free f a -> b #

foldr' :: (a -> b -> b) -> b -> Free f a -> b #

foldl :: (b -> a -> b) -> b -> Free f a -> b #

foldl' :: (b -> a -> b) -> b -> Free f a -> b #

foldr1 :: (a -> a -> a) -> Free f a -> a #

foldl1 :: (a -> a -> a) -> Free f a -> a #

toList :: Free f a -> [a] #

null :: Free f a -> Bool #

length :: Free f a -> Int #

elem :: Eq a => a -> Free f a -> Bool #

maximum :: Ord a => Free f a -> a #

minimum :: Ord a => Free f a -> a #

sum :: Num a => Free f a -> a #

product :: Num a => Free f a -> a #

(Eq a, Eq (f (Free f a))) => Eq (Free f a) Source # 

Methods

(==) :: Free f a -> Free f a -> Bool #

(/=) :: Free f a -> Free f a -> Bool #

(View Floating alg', View Fractional alg', View Num alg') => Floating (Free (Sig alg') a) Source # 

Methods

pi :: Free (Sig alg') a #

exp :: Free (Sig alg') a -> Free (Sig alg') a #

log :: Free (Sig alg') a -> Free (Sig alg') a #

sqrt :: Free (Sig alg') a -> Free (Sig alg') a #

(**) :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

logBase :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

sin :: Free (Sig alg') a -> Free (Sig alg') a #

cos :: Free (Sig alg') a -> Free (Sig alg') a #

tan :: Free (Sig alg') a -> Free (Sig alg') a #

asin :: Free (Sig alg') a -> Free (Sig alg') a #

acos :: Free (Sig alg') a -> Free (Sig alg') a #

atan :: Free (Sig alg') a -> Free (Sig alg') a #

sinh :: Free (Sig alg') a -> Free (Sig alg') a #

cosh :: Free (Sig alg') a -> Free (Sig alg') a #

tanh :: Free (Sig alg') a -> Free (Sig alg') a #

asinh :: Free (Sig alg') a -> Free (Sig alg') a #

acosh :: Free (Sig alg') a -> Free (Sig alg') a #

atanh :: Free (Sig alg') a -> Free (Sig alg') a #

log1p :: Free (Sig alg') a -> Free (Sig alg') a #

expm1 :: Free (Sig alg') a -> Free (Sig alg') a #

log1pexp :: Free (Sig alg') a -> Free (Sig alg') a #

log1mexp :: Free (Sig alg') a -> Free (Sig alg') a #

(View Fractional alg', View Num alg') => Fractional (Free (Sig alg') a) Source # 

Methods

(/) :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

recip :: Free (Sig alg') a -> Free (Sig alg') a #

fromRational :: Rational -> Free (Sig alg') a #

View Num alg' => Num (Free (Sig alg') a) Source # 

Methods

(+) :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

(-) :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

(*) :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

negate :: Free (Sig alg') a -> Free (Sig alg') a #

abs :: Free (Sig alg') a -> Free (Sig alg') a #

signum :: Free (Sig alg') a -> Free (Sig alg') a #

fromInteger :: Integer -> Free (Sig alg') a #

(Eq a, Eq (Sig alg' (Free (Sig alg') a)), View Ord alg', View Eq alg') => Ord (Free (Sig alg') a) Source # 

Methods

compare :: Free (Sig alg') a -> Free (Sig alg') a -> Ordering #

(<) :: Free (Sig alg') a -> Free (Sig alg') a -> Bool #

(<=) :: Free (Sig alg') a -> Free (Sig alg') a -> Bool #

(>) :: Free (Sig alg') a -> Free (Sig alg') a -> Bool #

(>=) :: Free (Sig alg') a -> Free (Sig alg') a -> Bool #

max :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

min :: Free (Sig alg') a -> Free (Sig alg') a -> Free (Sig alg') a #

(Show a, Show (f (Free f a))) => Show (Free f a) Source # 

Methods

showsPrec :: Int -> Free f a -> ShowS #

show :: Free f a -> String #

showList :: [Free f a] -> ShowS #

type AST alg a = Free (Sig alg) a Source #

runAST :: (FAlgebra alg, alg a) => AST alg a -> a Source #

class (FAlgebra alg1, FAlgebra alg2) => View alg1 alg2 where Source #

Minimal complete definition

embedSig, unsafeExtractSig

Methods

embedSig :: Sig alg1 a -> Sig alg2 a Source #

unsafeExtractSig :: Sig alg2 a -> Sig alg1 a Source #

Variables

data Var Source #

Instances

Eq Var Source # 

Methods

(==) :: Var -> Var -> Bool #

(/=) :: Var -> Var -> Bool #

Show Var Source # 

Methods

showsPrec :: Int -> Var -> ShowS #

show :: Var -> String #

showList :: [Var] -> ShowS #

Template Haskell

mkFAlgebra :: Name -> Q [Dec] Source #

Constructs instances for FAlgebra and related classes.