{-# LANGUAGE Rank2Types #-} module Language.LOL.Symantic.AST where import Data.Text (Text) import qualified Data.Text as Text -- * Type 'AST' -- | Abstract Syntax Tree. data AST = AST Text [AST] deriving (Eq, Show) -- * Type 'Error_Read' data Error_Read = Error_Read Text deriving (Eq, Show) read_safe :: Read a => Text -> Either Error_Read a read_safe t = case reads $ Text.unpack t of [(x, "")] -> Right x _ -> Left $ Error_Read t