language-ats 0.2.0.0 → 0.2.0.1
raw patch · 5 files changed
+29/−34 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Language.ATS: BoolTok :: AlexPosn -> Bool -> Token
+ Language.ATS: View :: AlexPosn -> Addendum -> Sort
- Language.ATS: AbsType :: AlexPosn -> String -> (Maybe [SortArg]) -> (Maybe Type) -> Declaration
+ Language.ATS: AbsType :: AlexPosn -> String -> SortArgs -> (Maybe Type) -> Declaration
- Language.ATS: AbsVT0p :: AlexPosn -> String -> (Maybe [SortArg]) -> (Maybe Type) -> Declaration
+ Language.ATS: AbsVT0p :: AlexPosn -> String -> SortArgs -> (Maybe Type) -> Declaration
- Language.ATS: AbsViewType :: AlexPosn -> String -> (Maybe [SortArg]) -> (Maybe Type) -> Declaration
+ Language.ATS: AbsViewType :: AlexPosn -> String -> SortArgs -> (Maybe Type) -> Declaration
- Language.ATS: DataProp :: AlexPosn -> String -> [Arg] -> [DataPropLeaf] -> Declaration
+ Language.ATS: DataProp :: AlexPosn -> String -> SortArgs -> [DataPropLeaf] -> Declaration
- Language.ATS: SortDef :: AlexPosn -> String -> Type -> Declaration
+ Language.ATS: SortDef :: AlexPosn -> String -> Sort -> Declaration
- Language.ATS: SumType :: String -> Maybe [SortArg] -> [Leaf] -> Declaration
+ Language.ATS: SumType :: String -> SortArgs -> [Leaf] -> Declaration
- Language.ATS: SumViewType :: String -> Maybe [SortArg] -> [Leaf] -> Declaration
+ Language.ATS: SumViewType :: String -> SortArgs -> [Leaf] -> Declaration
- Language.ATS: TypeDef :: AlexPosn -> String -> (Maybe [SortArg]) -> Type -> Declaration
+ Language.ATS: TypeDef :: AlexPosn -> String -> SortArgs -> Type -> Declaration
- Language.ATS: ViewTypeDef :: AlexPosn -> String -> (Maybe [SortArg]) -> Type -> Declaration
+ Language.ATS: ViewTypeDef :: AlexPosn -> String -> SortArgs -> Type -> Declaration
- Language.ATS: [typeArgs] :: Declaration -> Maybe [SortArg]
+ Language.ATS: [typeArgs] :: Declaration -> SortArgs
Files
- language-ats.cabal +1/−1
- src/Language/ATS/Lexer.x +0/−9
- src/Language/ATS/Parser.y +12/−13
- src/Language/ATS/PrettyPrint.hs +3/−2
- src/Language/ATS/Types.hs +13/−9
language-ats.cabal view
@@ -1,5 +1,5 @@ name: language-ats-version: 0.2.0.0+version: 0.2.0.1 synopsis: Parser and pretty-printer for ATS. description: Parser and pretty-printer for [ATS](http://www.ats-lang.org/), written with Happy and Alex. license: BSD3
src/Language/ATS/Lexer.x view
@@ -22,8 +22,6 @@ import Control.Composition import Data.Data (Typeable, Data)-import Data.Char (toUpper, toLower)-import Control.Lens (over, _head) import Control.DeepSeq (NFData) import GHC.Generics (Generic) import Text.PrettyPrint.ANSI.Leijen hiding (line, bool, column, (<$>))@@ -48,9 +46,6 @@ $br = [\<\>] --- Boolean literals-@bool = (true | false)- -- Integer @integer = $digit+ @time_lit = $digit+ u@@ -208,7 +203,6 @@ @char_lit { tok (\p s -> CharTok p (toChar s)) } @lambda { tok (\p s -> Arrow p s) } @func_type { tok (\p s -> FuncType p s) }- @bool { tok (\p s -> BoolTok p (read (over _head toUpper s)))} @time_lit { tok (\p s -> TimeTok p s) } @integer { tok (\p s -> IntTok p (read s)) } -- FIXME shouldn't fail silenty on overflow @float { tok (\p s -> FloatTok p (read s)) }@@ -321,7 +315,6 @@ data Token = Identifier AlexPosn String | Keyword AlexPosn Keyword- | BoolTok AlexPosn Bool | IntTok AlexPosn Int | FloatTok AlexPosn Float | CharTok AlexPosn Char@@ -425,7 +418,6 @@ pretty (Identifier _ s) = text s pretty (IdentifierSpace _ s) = text s pretty (Keyword _ kw) = pretty kw- pretty (BoolTok _ b) = text $ over _head toLower (show b) pretty (IntTok _ i) = pretty i pretty (FloatTok _ x) = pretty x pretty (CharTok _ c) = squotes (pretty c)@@ -453,7 +445,6 @@ token_posn (Identifier p _) = p token_posn (IdentifierSpace p _) = p token_posn (Keyword p _) = p-token_posn (BoolTok p _) = p token_posn (IntTok p _) = p token_posn (FloatTok p _) = p token_posn (StringTok p _) = p
src/Language/ATS/Parser.y view
@@ -101,7 +101,6 @@ propdef { Keyword $$ KwPropdef } list { Keyword $$ (KwListLit "") } list_vt { Keyword $$ (KwListLit "_vt") }- boolLit { BoolTok _ $$ } timeLit { TimeTok _ $$ } intLit { IntTok _ $$ } floatLit { FloatTok _ $$ }@@ -220,7 +219,6 @@ | Type prfTransform underscore { AsProof $1 Nothing } | view at Type { ViewType $1 $3 } | viewPlusMinus { ViewLiteral $1 }- | view { ViewLiteral None } | Existential Type { Ex $1 $2 } | Universal Type { ForA $1 $2 } | Type at Type { At $2 (Just $1) $3 }@@ -255,8 +253,7 @@ | StaticExpression { Arg (Second (ConcreteType $1)) } -- | Parse a literal-Literal : boolLit { BoolLit $1 }- | timeLit { TimeLit $1 }+Literal : timeLit { TimeLit $1 } | intLit { IntLit $1 } | floatLit { FloatLit $1 } | string { StringLit $1 }@@ -368,7 +365,6 @@ | StaticExpression BinOp StaticExpression { StaticBinary $2 $1 $3 } | intLit { StaticInt $1 } | doubleParens { StaticVoid $1 }- | boolLit { StaticBool $1 } | sif StaticExpression then StaticExpression else StaticExpression { Sif $2 $4 $6 } -- TODO separate type for static expressions | identifierSpace { StaticVal (Unqualified $ to_string $1) } | Name openParen StaticArgs closeParen { SCall $1 $3 }@@ -443,6 +439,7 @@ | vt0pPlain { Vt0p None } | vt0pCo { Vt0p Plus } | addr { Addr }+ | view { View $1 None } | IdentifierOr { NamedSort $1 } QuantifierArgs : IdentifierOr { [$1] }@@ -611,14 +608,13 @@ | lsqbracket {% Left $ Expected $1 "Function signature" "[" } -- | Parse affiliated `sortdef`s-AndSort : AndSort and IdentifierOr eq Type { AndD $1 (SortDef $2 $3 $5) } -- TODO figure out if this is building up the slow way- | sortdef IdentifierOr eq Type { SortDef $1 $2 $4 }+AndSort : AndSort and IdentifierOr eq Sort { AndD $1 (SortDef $2 $3 $5) } -- TODO figure out if this is building up the slow way+ | sortdef IdentifierOr eq Sort { SortDef $1 $2 $4 } --- FIXME stadef r() = file_mode_r()-AndStadef : stadef boolLit eq Name { Stadef (over _head toLower (show $2)) $4 [] }- | stadef boolLit eq identifierSpace { Stadef (over _head toLower (show $2)) (Unqualified $ to_string $4) [] }- | AndStadef and stadef boolLit eq identifierSpace { AndD $1 (Stadef (over _head toLower (show $4)) (Unqualified $ to_string $6) []) }- | AndStadef and stadef boolLit eq identifier { AndD $1 (Stadef (over _head toLower (show $4)) (Unqualified $ to_string $6) []) }+AndStadef : stadef IdentifierOr eq Name { Stadef $2 $4 [] }+ | stadef IdentifierOr eq identifierSpace { Stadef $2 (Unqualified $ to_string $4) [] }+ | AndStadef and stadef IdentifierOr eq identifierSpace { AndD $1 (Stadef $4 (Unqualified $ to_string $6) []) }+ | AndStadef and stadef IdentifierOr eq identifier { AndD $1 (Stadef $4 (Unqualified $ to_string $6) []) } StafunDecl : prfun PreFunction { Func $1 (PrFun $2) } | prfn PreFunction { Func $1 (PrFn $2) }@@ -658,6 +654,9 @@ SortArg : IdentifierOr colon Sort { [ SortArg $1 $3 ] } | SortArg comma IdentifierOr colon Sort { SortArg $3 $5 : $1 } | SortArg comma IdentifierOr { Anonymous (NamedSort $3) : $1 }+ | SortArg comma Sort { Anonymous $3 : $1 }+ | IdentifierOr { [ Anonymous (NamedSort $1) ] }+ | Sort { [Anonymous $1] } SortArgs : openParen SortArg closeParen { Just $2 } | doubleParens { Just [] }@@ -674,7 +673,7 @@ | absview IdentifierOr openParen FullArgs closeParen MaybeType { AbsView $1 $2 $4 $6 } | abstype IdentifierOr SortArgs MaybeType { AbsType $1 $2 $3 $4 } | absvtype IdentifierOr SortArgs MaybeType { AbsViewType $1 $2 $3 $4 }- | dataprop IdentifierOr openParen FullArgs closeParen eq DataPropLeaves { DataProp $1 $2 $4 $7 }+ | dataprop IdentifierOr SortArgs eq DataPropLeaves { DataProp $1 $2 $3 $5 } | absprop IdentifierOr openParen FullArgs closeParen { AbsProp $1 $2 $4 } | AndSort { $1 } | AndStadef { $1 }
src/Language/ATS/PrettyPrint.hs view
@@ -272,10 +272,12 @@ pretty (Vt0p ad) = "vt@ype" <> pretty ad pretty (NamedSort s) = text s pretty Addr = "addr"+ pretty (View _ t) = "view" <> pretty t instance Pretty Type where pretty = cata a where a (NamedF n) = pretty n+ a (ViewTypeF _ t) = "view@" <> parens t a (ExF e t) = pretty e <+> t a (DependentF n ts) = pretty n <> parens (mconcat (punctuate ", " (fmap pretty (reverse ts)))) a (ForAF u t) = pretty u <+> t@@ -290,7 +292,6 @@ a (ConcreteTypeF e) = pretty e a (TupleF _ ts) = parens (mconcat (punctuate ", " (fmap pretty (reverse ts)))) a (RefTypeF t) = "&" <> t- a (ViewTypeF _ t) = "view@" <> parens t a (FunctionTypeF s t t') = t <+> string s <+> t' a (ViewLiteralF c) = "view" <> pretty c a NoneTypeF{} = "()"@@ -548,7 +549,7 @@ pretty (Func _ (PrFun pref)) = "prfun" </> pretty pref pretty (Func _ (PrFn pref)) = "prfn" </> pretty pref pretty (Extern _ d) = "extern" <$> pretty d- pretty (DataProp _ s as ls) = "dataprop" <+> text s <> prettyArgs as <+> "=" <$> prettyDL ls+ pretty (DataProp _ s as ls) = "dataprop" <+> text s <> prettySortArgs as <+> "=" <$> prettyDL ls pretty (ViewTypeDef _ s as t) = "vtypedef" <+> text s <> prettySortArgs as <+> "=" <#> pretty t pretty (TypeDef _ s as t) = "typedef" <+> text s <> prettySortArgs as <+> "=" <+> pretty t pretty (AbsProp _ n as) = "absprop" <+> text n <+> prettyArgs as
src/Language/ATS/Types.hs view
@@ -43,6 +43,7 @@ , StackFunction (..) , Sort (..) , SortArg (..)+ , SortArgs , rewriteATS , rewriteDecl -- * Lenses@@ -75,6 +76,8 @@ data Leaf = Leaf { _constructorUniversals :: [Universal], name :: String, constructorArgs :: [String], maybeType :: Maybe Type } deriving (Show, Eq, Generic, NFData) +type SortArgs = Maybe [SortArg]+ -- | Declare something in a scope (a function, value, action, etc.) data Declaration = Func AlexPosn Function | Impl [Arg] Implementation -- TODO do something better for implicit universals@@ -88,23 +91,23 @@ | Staload Bool (Maybe String) String | Stadef String Name [Type] | CBlock String- | TypeDef AlexPosn String (Maybe [SortArg]) Type- | ViewTypeDef AlexPosn String (Maybe [SortArg]) Type- | SumType { typeName :: String, typeArgs :: Maybe [SortArg], _leaves :: [Leaf] }- | SumViewType { typeName :: String, typeArgs :: Maybe [SortArg], _leaves :: [Leaf] }- | AbsType AlexPosn String (Maybe [SortArg]) (Maybe Type)- | AbsViewType AlexPosn String (Maybe [SortArg]) (Maybe Type)+ | TypeDef AlexPosn String SortArgs Type+ | ViewTypeDef AlexPosn String SortArgs Type+ | SumType { typeName :: String, typeArgs :: SortArgs, _leaves :: [Leaf] }+ | SumViewType { typeName :: String, typeArgs :: SortArgs, _leaves :: [Leaf] }+ | AbsType AlexPosn String SortArgs (Maybe Type)+ | AbsViewType AlexPosn String SortArgs (Maybe Type) | AbsView AlexPosn String [Arg] (Maybe Type)- | AbsVT0p AlexPosn String (Maybe [SortArg]) (Maybe Type)+ | AbsVT0p AlexPosn String SortArgs (Maybe Type) | AbsT0p AlexPosn String Type | ViewDef AlexPosn String [Arg] Type | OverloadOp AlexPosn BinOp Name | OverloadIdent AlexPosn String Name (Maybe Int) | Comment String- | DataProp AlexPosn String [Arg] [DataPropLeaf]+ | DataProp AlexPosn String SortArgs [DataPropLeaf] | Extern AlexPosn Declaration | Define String- | SortDef AlexPosn String Type+ | SortDef AlexPosn String Sort | AndD Declaration Declaration | Local AlexPosn ATS ATS | AbsProp AlexPosn String [Arg]@@ -193,6 +196,7 @@ | T0p Addendum -- ^ t@ype | Vt0p Addendum -- ^ vt@ype | Addr+ | View AlexPosn Addendum -- ^ view deriving (Show, Eq, Generic, NFData) -- FIXME a type for sorts?