packages feed

fir-0.1.0.0: src/CodeGen/CodeGen.hs-boot

{-# LANGUAGE DataKinds            #-}
{-# LANGUAGE FlexibleContexts     #-}
{-# LANGUAGE PolyKinds            #-}
{-# LANGUAGE TypeFamilies         #-}
{-# LANGUAGE UndecidableInstances #-}

module CodeGen.CodeGen where

-- base
import Data.Kind
  ( Type )

-- fir
import CodeGen.Application
  ( Application )
import CodeGen.Instruction
  ( ID )
import CodeGen.Monad
  ( CGMonad )
import FIR.AST.Type
  ( AugType, Nullary )
import qualified SPIRV.PrimTy as SPIRV

----------------------------------------------------------------------------
-- export the 'CodeGen' type class and instance for the AST
-- this allows auxiliary code generation code to recursively call 'codeGen'

class CodeGen (ast :: AugType -> Type) where
  codeGenArgs :: Nullary r => Application ast f r -> CGMonad (ID, SPIRV.PrimTy)

codeGen :: ( CodeGen f, Nullary a ) => f a -> CGMonad (ID, SPIRV.PrimTy)