This commit is contained in:
2026-05-05 07:29:54 -06:00
parent 9297f9bb8e
commit 84326faf47
7 changed files with 237 additions and 99 deletions

34
app/Gyehoek/GenSym.hs Normal file
View File

@@ -0,0 +1,34 @@
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE TypeFamilies #-}
module Gyehoek.GenSym where
import Numeric.Natural
import Effectful.State.Dynamic
import Effectful.Dispatch.Dynamic
import Effectful
import Language.QBE as QBE
import Data.String (IsString(fromString))
import Data.Text (Text)
class Gen a where
gen :: Natural -> a
data GenSym :: Effect where
GenSym :: Gen a => GenSym m a
type instance DispatchOf GenSym = Dynamic
gensym :: forall a es. (Gen a, GenSym :> es) => Eff es a
gensym = send GenSym
runGenSym :: Eff (GenSym : es) a -> Eff es a
runGenSym = reinterpret (evalStateLocal (0 :: Natural)) \_ GenSym ->
state \n -> (gen n, succ n)
-- state \n -> (Ident . fromString $ '.' : show n, succ n)
instance Gen (QBE.Ident s) where
gen = Ident . fromString . ('.':) . show
instance Gen Text where
gen = fromString . ('x':) . show