@@ -8,18 +8,21 @@ import Control.Monad.IO.Class (MonadIO)
88import Control.Monad.Reader.Class ( MonadReader , ask )
99import Control.Monad.Reader ( ReaderT (runReaderT ), local )
1010import Control.Monad.Trans
11- import Data.List ( elemIndex , foldl' )
11+ import Data.List ( elemIndex , foldl' , singleton )
1212import Data.Maybe ( fromMaybe , listToMaybe )
13+ import Data.Foldable ( foldrM )
1314
1415import Agda.Compiler.Backend ( MonadTCState , HasOptions )
1516import Agda.Compiler.Backend ( getConstInfo , theDef , pattern Datatype , dataMutual )
1617import Agda.Syntax.Abstract.Name ( ModuleName (.. ), QName (.. ) )
18+ import Agda.Syntax.Builtin ( builtinZero , builtinSuc )
1719import Agda.Syntax.Common ( Erased (.. ) )
1820import Agda.Syntax.Common.Pretty ( prettyShow )
1921import Agda.Syntax.Literal
2022import Agda.Syntax.Treeless ( TTerm (.. ), TAlt (.. ), CaseInfo (.. ), CaseType (.. ) )
2123import Agda.TypeChecking.Datatypes ( getConstructorData , getConstructors )
2224import Agda.TypeChecking.Monad.Base ( TCM , liftTCM , MonadTCEnv , MonadTCM )
25+ import Agda.TypeChecking.Monad.Builtin ( getBuiltinName_ )
2326
2427import LambdaBox ( Term (.. ) )
2528import LambdaBox qualified as LBox
@@ -125,7 +128,15 @@ compileTermC = \case
125128
126129compileLit :: Literal -> C LBox. Term
127130compileLit = \ case
128- l -> fail $ " unsupported literal: " <> prettyShow l
131+
132+ LitNat i -> do
133+ qz <- liftTCM $ getBuiltinName_ builtinZero
134+ qs <- liftTCM $ getBuiltinName_ builtinSuc
135+ z <- liftTCM $ toConApp qz []
136+ let ss = take (fromInteger i) $ repeat (toConApp qs . singleton)
137+ liftTCM $ foldrM ($) z ss
138+
139+ l -> fail $ " unsupported literal: " <> prettyShow l
129140
130141compileCaseType :: CaseType -> C LBox. Inductive
131142compileCaseType = \ case
0 commit comments