lowerslop

This commit is contained in:
2026-07-05 20:13:49 -06:00
parent a2c93938ca
commit 08a18f159f
5 changed files with 61 additions and 6 deletions
-3
View File
@@ -45,6 +45,3 @@ convert (Scm.ExpApply f xs) k =
pure $ ExpFix [(r, MkKappa [x] m)] $ ExpApply f' (xs' ++ [ValVar r]) pure $ ExpFix [(r, MkKappa [x] m)] $ ExpApply f' (xs' ++ [ValVar r])
convert _ k = _ convert _ k = _
halt :: Applicative f => Val -> f Exp
halt = pure . ExpApply (ValVar "halt") . pure
+41 -2
View File
@@ -1,9 +1,13 @@
{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TypeFamilies #-}
module Gyehoek.CPS.Lower module Gyehoek.CPS.Lower
( lower ( lower
) where ) where
import Gyehoek.CPS.Syntax import Gyehoek.CPS.Syntax
import Data.Generics.Labels
import Gyehoek.Scheme.Syntax qualified as Scm import Gyehoek.Scheme.Syntax qualified as Scm
import Gyehoek.GenSym import Gyehoek.GenSym
import Data.List.NonEmpty (NonEmpty((:|))) import Data.List.NonEmpty (NonEmpty((:|)))
@@ -14,6 +18,9 @@ import Data.Text (Text)
import Data.Vector.Strict (Vector) import Data.Vector.Strict (Vector)
import Control.Lens import Control.Lens
import Data.Foldable import Data.Foldable
import Data.HashMap.Strict (HashMap)
import Numeric.Natural
import GHC.Generics (Generic)
type Emit = Writer (Vector Text) type Emit = Writer (Vector Text)
@@ -21,5 +28,37 @@ type Emit = Writer (Vector Text)
runEmit :: Eff (Emit : es) a -> Eff es (a, Text) runEmit :: Eff (Emit : es) a -> Eff es (a, Text)
runEmit = (mapped . _2 %~ fold) . runWriter runEmit = (mapped . _2 %~ fold) . runWriter
lower :: Exp -> Eff _ _ data Env = MkEnv { vars :: HashMap Name Natural }
lower = _ deriving (Show, Generic)
type instance Index Env = Name
type instance IxValue Env = Natural
instance Ixed Env where
instance At Env where
at i = #vars . at i
-- countLocals :: Exp -> Int
-- countLocals (ExpPrim p rs es) = length rs + sumOf (each . to countLocals) es
-- countLocals (ExpFix bs e) =
-- sumOf (each . _2 . _MkKappa . ((_1 . each . to (const 1))
-- <> (_2 . to countLocals))) bs
-- + countLocals e
-- countLocals (ExpApply _ _) = 0
lowerVal :: Env -> Val -> Vector Text
lowerVal g (ValVar x) = _
lower :: Env -> Exp -> Vector Text
lower g (Halt _) = []
lower g (ExpPrim p rs es) = _
+17
View File
@@ -1,10 +1,17 @@
{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TemplateHaskell #-}
module Gyehoek.CPS.Syntax module Gyehoek.CPS.Syntax
( Val(..) ( Val(..)
, Kappa(..) , Kappa(..)
, Exp(..) , Exp(..)
, Name(..) , Name(..)
, Prim(..) , Prim(..)
, pattern Halt
, pattern Halt1
, _MkKappa
, _ExpPrim
, _ExpFix
, _ExpApply
) )
where where
@@ -16,6 +23,7 @@ import Data.List (List)
import GHC.Generics (Generic) import GHC.Generics (Generic)
import Language.SexpGrammar.Generic import Language.SexpGrammar.Generic
import Control.Category import Control.Category
import Control.Lens
import Data.Text qualified as T import Data.Text qualified as T
import Data.Generics.Labels import Data.Generics.Labels
import Prelude hiding ((.), id) import Prelude hiding ((.), id)
@@ -38,6 +46,15 @@ data Exp
| ExpApply Val (List Val) | ExpApply Val (List Val)
deriving (Show, Generic) deriving (Show, Generic)
pattern Halt :: List Val -> Exp
pattern Halt xs = ExpApply (ValVar "halt") xs
pattern Halt1 :: Val -> Exp
pattern Halt1 x = ExpApply (ValVar "halt") [x]
makePrisms ''Kappa
makePrisms ''Exp
-- SexpIso instances -- SexpIso instances
+2 -1
View File
@@ -28,10 +28,11 @@ import Gyehoek.Sexp qualified
import Gyehoek.GenSym (Gen) import Gyehoek.GenSym (Gen)
import Control.Lens (Each) import Control.Lens (Each)
import Data.String (IsString) import Data.String (IsString)
import Data.Hashable (Hashable)
newtype Name = MkName { getName :: Text } newtype Name = MkName { getName :: Text }
deriving newtype (Show, Eq, IsString, Gen) deriving newtype (Show, Eq, IsString, Gen, Hashable)
deriving stock (Generic) deriving stock (Generic)
data Prim e data Prim e
+1
View File
@@ -54,6 +54,7 @@ executable gyehoek
, effectful-plugin , effectful-plugin
, filepath , filepath
, generic-lens , generic-lens
, hashable
, invertible-grammar , invertible-grammar
, lens , lens
, megaparsec , megaparsec