rc #13
@@ -17,6 +17,7 @@ import Data.Functor.Apply
|
|||||||
import Data.Functor.Bind
|
import Data.Functor.Bind
|
||||||
import Control.Comonad
|
import Control.Comonad
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
|
import Data.Semigroup.Traversable
|
||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
import Data.Void
|
import Data.Void
|
||||||
}
|
}
|
||||||
@@ -104,23 +105,24 @@ DataCons :: { [ConAlt RlpcPs] }
|
|||||||
| DataCon { [$1] }
|
| DataCon { [$1] }
|
||||||
|
|
||||||
DataCon :: { ConAlt RlpcPs }
|
DataCon :: { ConAlt RlpcPs }
|
||||||
: Con Type1s { ConAlt $1 $2 }
|
: Con Type1s { undefined }
|
||||||
|
|
||||||
Type1s :: { [Type] }
|
Type1s :: { [Type] }
|
||||||
: {- epsilon -} { [] }
|
: {- epsilon -} { [] }
|
||||||
| Type1s Type1 { $1 `snoc` $2 }
|
| Type1s Type1 { $1 `snoc` $2 }
|
||||||
|
|
||||||
Type1 :: { Type }
|
Type1 :: { Type }
|
||||||
: '(' Type ')' { $2 }
|
: '(' Type ')' { undefined }
|
||||||
| conname { TyCon $1 }
|
| conname { undefined }
|
||||||
| varname { TyVar $1 }
|
| varname { undefined }
|
||||||
|
|
||||||
Type :: { Type }
|
Type :: { Type }
|
||||||
: Type '->' Type { $1 :-> $3 }
|
: Type '->' Type { $1 :-> $3 }
|
||||||
| Type1 { $1 }
|
| Type1 { $1 }
|
||||||
|
|
||||||
FunDecl :: { Decl' RlpcPs }
|
FunDecl :: { Decl' RlpcPs }
|
||||||
FunDecl : Var Params '=' Expr { FunD undefined $2 $4 Nothing }
|
FunDecl : Var Params '=' Expr { $4 =>> \e ->
|
||||||
|
FunD' (extract $1) $2 e Nothing }
|
||||||
|
|
||||||
Params :: { [Pat' RlpcPs] }
|
Params :: { [Pat' RlpcPs] }
|
||||||
Params : {- epsilon -} { [] }
|
Params : {- epsilon -} { [] }
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ type instance IdP RlpcPs = PsName
|
|||||||
type instance XInfixD RlpcPs = ()
|
type instance XInfixD RlpcPs = ()
|
||||||
type instance XVarE RlpcPs = ()
|
type instance XVarE RlpcPs = ()
|
||||||
type instance XLitE RlpcPs = ()
|
type instance XLitE RlpcPs = ()
|
||||||
|
type instance XFunD RlpcPs = ()
|
||||||
|
|
||||||
type PsName = Text
|
type PsName = Text
|
||||||
|
|
||||||
|
|||||||
@@ -12,16 +12,17 @@ module Rlp.Syntax
|
|||||||
, Assoc(..)
|
, Assoc(..)
|
||||||
, Lit(..), Lit'
|
, Lit(..), Lit'
|
||||||
, Type(..)
|
, Type(..)
|
||||||
|
, pattern (:->)
|
||||||
, ConAlt(..)
|
, ConAlt(..)
|
||||||
|
|
||||||
-- * Pattern synonyms for unused extensions
|
-- * Pattern synonyms for unused extensions
|
||||||
-- ** Decl
|
-- ** Decl
|
||||||
, pattern InfixD'
|
, pattern InfixD', pattern FunD'
|
||||||
-- ** RlpExpr
|
-- ** RlpExpr
|
||||||
, pattern ParE', pattern VarE', pattern LitE'
|
, pattern ParE', pattern VarE', pattern LitE'
|
||||||
|
|
||||||
-- * Trees That Grow extensions
|
-- * Trees That Grow extensions
|
||||||
, XRec, IdP
|
, UnXRec(..), MapXRec(..), XRec, IdP
|
||||||
-- ** RlpExpr
|
-- ** RlpExpr
|
||||||
, XLetE, XVarE, XConE, XLamE, XCaseE, XIfE, XAppE, XLitE, XXRlpExpr
|
, XLetE, XVarE, XConE, XLamE, XCaseE, XIfE, XAppE, XLitE, XXRlpExpr
|
||||||
-- ** Decl
|
-- ** Decl
|
||||||
@@ -47,7 +48,7 @@ data RlpModule p = RlpModule
|
|||||||
|
|
||||||
newtype RlpProgram p = RlpProgram [Decl p]
|
newtype RlpProgram p = RlpProgram [Decl p]
|
||||||
|
|
||||||
data Decl p = FunD (XFunD p) (IdP p) [Pat p] (RlpExpr p) (Maybe (Where p))
|
data Decl p = FunD (XFunD p) (IdP p) [Pat' p] (RlpExpr' p) (Maybe (Where p))
|
||||||
| TySigD (XTySigD p) [IdP p] Type
|
| TySigD (XTySigD p) [IdP p] Type
|
||||||
| DataD (XDataD p) (IdP p) [IdP p] [ConAlt p]
|
| DataD (XDataD p) (IdP p) [IdP p] [ConAlt p]
|
||||||
| InfixD (XInfixD p) Assoc Int (IdP p)
|
| InfixD (XInfixD p) Assoc Int (IdP p)
|
||||||
@@ -59,6 +60,11 @@ type family XDataD p
|
|||||||
type family XInfixD p
|
type family XInfixD p
|
||||||
type family XXDecl p
|
type family XXDecl p
|
||||||
|
|
||||||
|
pattern FunD' :: (XFunD p ~ ())
|
||||||
|
=> IdP p -> [Pat' p] -> RlpExpr' p -> (Maybe (Where p))
|
||||||
|
-> Decl p
|
||||||
|
pattern FunD' n as e wh = FunD () n as e wh
|
||||||
|
|
||||||
pattern InfixD' :: (XInfixD p ~ ()) => Assoc -> Int -> (IdP p) -> Decl p
|
pattern InfixD' :: (XInfixD p ~ ()) => Assoc -> Int -> (IdP p) -> Decl p
|
||||||
pattern InfixD' a p n = InfixD () a p n
|
pattern InfixD' a p n = InfixD () a p n
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user