{-# LANGUAGE GADTs #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} module Language.Drasil.Literal.Lang where import Language.Drasil.Space (Space (..)) import Language.Drasil.WellTyped (Typed(..), TypingContext, TypeError, typeCheckByInfer) data Literal where Int :: Integer -> Literal Str :: String -> Literal Dbl :: Double -> Literal ExactDbl :: Integer -> Literal Perc :: Integer -> Integer -> Literal deriving Literal -> Literal -> Bool (Literal -> Literal -> Bool) -> (Literal -> Literal -> Bool) -> Eq Literal forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Literal -> Literal -> Bool == :: Literal -> Literal -> Bool $c/= :: Literal -> Literal -> Bool /= :: Literal -> Literal -> Bool Eq instance Typed Literal Space where infer :: TypingContext Space -> Literal -> Either TypeError Space infer :: TypingContext Space -> Literal -> Either String Space infer TypingContext Space _ (Int Integer _) = Space -> Either String Space forall a. a -> Either String a forall (f :: * -> *) a. Applicative f => a -> f a pure Space Integer infer TypingContext Space _ (Str String _) = Space -> Either String Space forall a. a -> Either String a forall (f :: * -> *) a. Applicative f => a -> f a pure Space String infer TypingContext Space _ (Dbl Double _) = Space -> Either String Space forall a. a -> Either String a forall (f :: * -> *) a. Applicative f => a -> f a pure Space Real infer TypingContext Space _ (ExactDbl Integer _) = Space -> Either String Space forall a. a -> Either String a forall (f :: * -> *) a. Applicative f => a -> f a pure Space Real infer TypingContext Space _ (Perc Integer _ Integer _) = Space -> Either String Space forall a. a -> Either String a forall (f :: * -> *) a. Applicative f => a -> f a pure Space Real check :: TypingContext Space -> Literal -> Space -> Either TypeError Space check :: TypingContext Space -> Literal -> Space -> Either String Space check = TypingContext Space -> Literal -> Space -> Either String Space forall e t. Typed e t => TypingContext t -> e -> t -> Either String t typeCheckByInfer