Merge pull request #5 from msydneyslaga/dev

towards stabilising main branch
This commit was merged in pull request #5.
This commit is contained in:
msydneyslaga
2023-12-13 11:05:27 -07:00
committed by GitHub
4 changed files with 17 additions and 3 deletions

View File

@@ -68,6 +68,7 @@ rlp :-
"{" { constTok TokenLBrace } "{" { constTok TokenLBrace }
"}" { constTok TokenRBrace } "}" { constTok TokenRBrace }
";" { constTok TokenSemicolon } ";" { constTok TokenSemicolon }
"@" { constTok TokenTypeApp }
"{-#" { constTok TokenLPragma `andBegin` pragma } "{-#" { constTok TokenLPragma `andBegin` pragma }
"let" { constTok TokenLet } "let" { constTok TokenLet }
@@ -133,6 +134,7 @@ data CoreToken = TokenLet
| TokenLBrace | TokenLBrace
| TokenRBrace | TokenRBrace
| TokenSemicolon | TokenSemicolon
| TokenTypeApp
| TokenLPragma | TokenLPragma
| TokenRPragma | TokenRPragma
| TokenWord String | TokenWord String

View File

@@ -47,6 +47,7 @@ import Data.Default.Class (def)
'λ' { Located _ _ _ TokenLambda } 'λ' { Located _ _ _ TokenLambda }
'->' { Located _ _ _ TokenArrow } '->' { Located _ _ _ TokenArrow }
'=' { Located _ _ _ TokenEquals } '=' { Located _ _ _ TokenEquals }
'@' { Located _ _ _ TokenTypeApp }
'(' { Located _ _ _ TokenLParen } '(' { Located _ _ _ TokenLParen }
')' { Located _ _ _ TokenRParen } ')' { Located _ _ _ TokenRParen }
'{' { Located _ _ _ TokenLBrace } '{' { Located _ _ _ TokenLBrace }
@@ -106,7 +107,6 @@ Binders : Var Binders { $1 : $2 }
Application :: { Expr Name } Application :: { Expr Name }
Application : Expr1 AppArgs { foldl' App $1 $2 } Application : Expr1 AppArgs { foldl' App $1 $2 }
-- TODO: Application can probably be written as a single rule, without AppArgs
AppArgs :: { [Expr Name] } AppArgs :: { [Expr Name] }
AppArgs : Expr1 AppArgs { $1 : $2 } AppArgs : Expr1 AppArgs { $1 : $2 }
| Expr1 { [$1] } | Expr1 { [$1] }

View File

@@ -6,6 +6,7 @@ Description : Core ASTs and the like
{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FunctionalDependencies #-}
module Core.Syntax module Core.Syntax
( Expr(..) ( Expr(..)
, Type(..)
, Literal(..) , Literal(..)
, pattern (:$) , pattern (:$)
, Binding(..) , Binding(..)
@@ -36,8 +37,8 @@ import Data.List (intersperse)
import Data.Function ((&)) import Data.Function ((&))
import Data.String import Data.String
-- Lift instances for the Core quasiquoters -- Lift instances for the Core quasiquoters
import Lens.Micro
import Language.Haskell.TH.Syntax (Lift) import Language.Haskell.TH.Syntax (Lift)
import Lens.Micro
---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
data Expr b = Var Name data Expr b = Var Name
@@ -47,10 +48,20 @@ data Expr b = Var Name
| Let Rec [Binding b] (Expr b) | Let Rec [Binding b] (Expr b)
| App (Expr b) (Expr b) | App (Expr b) (Expr b)
| LitE Literal | LitE Literal
| Type Type
deriving (Show, Read, Lift) deriving (Show, Read, Lift)
deriving instance (Eq b) => Eq (Expr b) deriving instance (Eq b) => Eq (Expr b)
data Type = TyInt
| TyFun
| TyVar Name
| TyApp Type Type
| TyConApp TyCon [Type]
deriving (Show, Read, Lift, Eq)
type TyCon = Name
infixl 2 :$ infixl 2 :$
pattern (:$) :: Expr b -> Expr b -> Expr b pattern (:$) :: Expr b -> Expr b -> Expr b
pattern f :$ x = App f x pattern f :$ x = App f x

View File

@@ -57,6 +57,7 @@ floatNonStrictCases g = goE
goE :: Expr' -> Floater Expr' goE :: Expr' -> Floater Expr'
goE (Var k) = pure (Var k) goE (Var k) = pure (Var k)
goE (LitE l) = pure (LitE l) goE (LitE l) = pure (LitE l)
goE (Case e as) = pure (Case e as)
goE (Let Rec bs e) = Let Rec <$> bs' <*> goE e goE (Let Rec bs e) = Let Rec <$> bs' <*> goE e
where bs' = travBs goE bs where bs' = travBs goE bs
goE e = goC e goE e = goC e