rc #13

Merged
crumbtoo merged 196 commits from dev into main 2024-02-13 13:22:23 -07:00
3 changed files with 42 additions and 7 deletions
Showing only changes of commit 0fc82f3fa8 - Show all commits

View File

@@ -11,6 +11,7 @@ module Rlp.Syntax
, progDecls , progDecls
, Decl(..), Decl', RlpExpr(..), RlpExpr' , Decl(..), Decl', RlpExpr(..), RlpExpr'
, Pat(..), Pat' , Pat(..), Pat'
, Alt(..)
, Assoc(..) , Assoc(..)
, Lit(..), Lit' , Lit(..), Lit'
, RlpType(..), RlpType' , RlpType(..), RlpType'
@@ -19,7 +20,7 @@ module Rlp.Syntax
-- * Trees That Grow boilerplate -- * Trees That Grow boilerplate
-- ** Extension points -- ** Extension points
, IdP, XRec, UnXRec(..), MapXRec(..) , IdP, IdP', XRec, UnXRec(..), MapXRec(..)
-- *** Decl -- *** Decl
, XFunD, XTySigD, XInfixD, XDataD, XXDeclD , XFunD, XTySigD, XInfixD, XDataD, XXDeclD
-- *** RlpExpr -- *** RlpExpr
@@ -36,6 +37,10 @@ module Rlp.Syntax
-- *** RlpType -- *** RlpType
, pattern FunConT'', pattern FunT'', pattern AppT'', pattern VarT'' , pattern FunConT'', pattern FunT'', pattern AppT'', pattern VarT''
, pattern ConT'' , pattern ConT''
-- *** Pat
, pattern VarP'', pattern LitP'', pattern ConP''
-- ** NoLocated
, NoLocated
) )
where where
---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
@@ -223,6 +228,8 @@ type family XRec p a = (r :: Type) | r -> p a
type family IdP p type family IdP p
type IdP' p = XRec p (IdP p)
type Where p = [Binding p] type Where p = [Binding p]
-- do we want guards? -- do we want guards?
@@ -242,6 +249,14 @@ data Pat p = VarP (IdP p)
| LitP (Lit' p) | LitP (Lit' p)
| ConP (IdP p) [Pat' p] | ConP (IdP p) [Pat' p]
pattern VarP'' :: (UnXRec p) => IdP p -> Pat' p
pattern LitP'' :: (UnXRec p) => Lit' p -> Pat' p
pattern ConP'' :: (UnXRec p) => IdP p -> [Pat' p] -> Pat' p
pattern VarP'' n <- (unXRec -> VarP n)
pattern LitP'' l <- (unXRec -> LitP l)
pattern ConP'' c as <- (unXRec -> ConP c as)
deriving instance (PhaseShow p) => Show (Pat p) deriving instance (PhaseShow p) => Show (Pat p)
type Pat' p = XRec p (Pat p) type Pat' p = XRec p (Pat p)
@@ -284,6 +299,10 @@ makeLenses ''RlpModule
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- stripLocation :: (UnXRec p) => XRec p a -> f NoLocated data NoLocated
-- stripLocation p = undefined
type instance XRec NoLocated a = Identity a
stripLocation :: (UnXRec p) => XRec p a -> f NoLocated
stripLocation p = undefined

6
src/Rlp/TH.hs Normal file
View File

@@ -0,0 +1,6 @@
module Rlp.TH
( rlpProg
, rlpExpr
)
where

View File

@@ -7,17 +7,20 @@ import Control.Monad
import Control.Monad.Writer.CPS import Control.Monad.Writer.CPS
import Control.Arrow import Control.Arrow
import Control.Applicative import Control.Applicative
import Lens.Micro import Control.Comonad
import Lens.Micro.Internal -- import Lens.Micro
-- import Lens.Micro.Internal
import Control.Lens
import Data.Text (Text) import Data.Text (Text)
import Data.Text qualified as T import Data.Text qualified as T
import Data.HashMap.Strict qualified as H import Data.HashMap.Strict qualified as H
import Data.Monoid (Endo(..)) import Data.Monoid (Endo(..))
import Data.Foldable import Data.Foldable
import Data.Functor.Bind
import Core.Syntax as Core import Core.Syntax as Core
import Rlp.Syntax as Rlp import Rlp.Syntax as Rlp
import Rlp.Parse.Types (RlpcPs) import Rlp.Parse.Types (RlpcPs, PsName)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- the rl' program is desugared by desugaring each declaration as a separate -- the rl' program is desugared by desugaring each declaration as a separate
@@ -38,7 +41,14 @@ declToCore (DataD'' n as ds) = fold . getZipList $
-- arguments -- arguments
t' = foldl TyApp (TyCon n) (TyVar . dsNameToName <$> as) t' = foldl TyApp (TyCon n) (TyVar . dsNameToName <$> as)
declToCore (FunD'' n as e wh) = mempty & declToCore fd@(FunD'' n as e wh) = undefined
caseify :: IdP' RlpcPs -> RlpExpr' RlpcPs -> Pat' RlpcPs
-> (RlpExpr RlpcPs, Pat RlpcPs)
caseify x e p = (e', p') where
p' = VarP (extract x)
e' = CaseE (VarE <$> x) [(alt, [])]
alt = AltA p e
constructorToCore :: Type -> Tag -> ConAlt RlpcPs -> Program' constructorToCore :: Type -> Tag -> ConAlt RlpcPs -> Program'
constructorToCore t tag (ConAlt cn as) = constructorToCore t tag (ConAlt cn as) =