module Curry.FlatCurry.Annotated.Typing (Typeable(..)) where
import Curry.FlatCurry.Annotated.Type
class Typeable a where
typeOf :: a -> TypeExpr
instance Typeable TypeExpr where
typeOf = id
instance Typeable a => Typeable (AExpr a) where
typeOf (AVar a _) = typeOf a
typeOf (ALit a _) = typeOf a
typeOf (AComb a _ _ _) = typeOf a
typeOf (ALet a _ _) = typeOf a
typeOf (AFree a _ _) = typeOf a
typeOf (AOr a _ _) = typeOf a
typeOf (ACase a _ _ _) = typeOf a
typeOf (ATyped a _ _) = typeOf a
instance Typeable a => Typeable (APattern a) where
typeOf (APattern a _ _) = typeOf a
typeOf (ALPattern a _) = typeOf a