{-# LANGUAGE DeriveDataTypeable #-} module Burrito.Internal.Type.Expression ( Expression (..), ) where import qualified Burrito.Internal.Type.Operator as Operator import qualified Burrito.Internal.Type.Variable as Variable import qualified Data.Data as Data import qualified Data.List.NonEmpty as NonEmpty data Expression = Expression { Expression -> Operator operator :: Operator.Operator, Expression -> NonEmpty Variable variables :: NonEmpty.NonEmpty Variable.Variable } deriving (Typeable Expression Typeable Expression => (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expression -> c Expression) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Expression) -> (Expression -> Constr) -> (Expression -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Expression)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Expression)) -> ((forall b. Data b => b -> b) -> Expression -> Expression) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r) -> (forall u. (forall d. Data d => d -> u) -> Expression -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> Expression -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Expression -> m Expression) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression) -> Data Expression Expression -> Constr Expression -> DataType (forall b. Data b => b -> b) -> Expression -> Expression forall a. Typeable a => (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a) -> (a -> Constr) -> (a -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c a)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)) -> ((forall b. Data b => b -> b) -> a -> a) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall u. (forall d. Data d => d -> u) -> a -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> Data a forall u. Int -> (forall d. Data d => d -> u) -> Expression -> u forall u. (forall d. Data d => d -> u) -> Expression -> [u] forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Expression -> m Expression forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Expression forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expression -> c Expression forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Expression) forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Expression) $cgfoldl :: forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expression -> c Expression gfoldl :: forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expression -> c Expression $cgunfold :: forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Expression gunfold :: forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Expression $ctoConstr :: Expression -> Constr toConstr :: Expression -> Constr $cdataTypeOf :: Expression -> DataType dataTypeOf :: Expression -> DataType $cdataCast1 :: forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Expression) dataCast1 :: forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Expression) $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Expression) dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Expression) $cgmapT :: (forall b. Data b => b -> b) -> Expression -> Expression gmapT :: (forall b. Data b => b -> b) -> Expression -> Expression $cgmapQl :: forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r gmapQl :: forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r $cgmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expression -> r $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Expression -> [u] gmapQ :: forall u. (forall d. Data d => d -> u) -> Expression -> [u] $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Expression -> u gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Expression -> u $cgmapM :: forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Expression -> m Expression gmapM :: forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Expression -> m Expression $cgmapMp :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression gmapMp :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression $cgmapMo :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression gmapMo :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Expression -> m Expression Data.Data, Expression -> Expression -> Bool (Expression -> Expression -> Bool) -> (Expression -> Expression -> Bool) -> Eq Expression forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Expression -> Expression -> Bool == :: Expression -> Expression -> Bool $c/= :: Expression -> Expression -> Bool /= :: Expression -> Expression -> Bool Eq, Eq Expression Eq Expression => (Expression -> Expression -> Ordering) -> (Expression -> Expression -> Bool) -> (Expression -> Expression -> Bool) -> (Expression -> Expression -> Bool) -> (Expression -> Expression -> Bool) -> (Expression -> Expression -> Expression) -> (Expression -> Expression -> Expression) -> Ord Expression Expression -> Expression -> Bool Expression -> Expression -> Ordering Expression -> Expression -> Expression forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Expression -> Expression -> Ordering compare :: Expression -> Expression -> Ordering $c< :: Expression -> Expression -> Bool < :: Expression -> Expression -> Bool $c<= :: Expression -> Expression -> Bool <= :: Expression -> Expression -> Bool $c> :: Expression -> Expression -> Bool > :: Expression -> Expression -> Bool $c>= :: Expression -> Expression -> Bool >= :: Expression -> Expression -> Bool $cmax :: Expression -> Expression -> Expression max :: Expression -> Expression -> Expression $cmin :: Expression -> Expression -> Expression min :: Expression -> Expression -> Expression Ord, Int -> Expression -> ShowS [Expression] -> ShowS Expression -> String (Int -> Expression -> ShowS) -> (Expression -> String) -> ([Expression] -> ShowS) -> Show Expression forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Expression -> ShowS showsPrec :: Int -> Expression -> ShowS $cshow :: Expression -> String show :: Expression -> String $cshowList :: [Expression] -> ShowS showList :: [Expression] -> ShowS Show)