{-# OPTIONS --cubical --safe #-}

module Data.Nat.Show where

open import Prelude
open import Data.Nat
open import Data.Nat.DivMod
open import Data.String
open import Data.List

showDig :   Char
showDig 0 = '0'
showDig 1 = '1'
showDig 2 = '2'
showDig 3 = '3'
showDig 4 = '4'
showDig 5 = '5'
showDig 6 = '6'
showDig 7 = '7'
showDig 8 = '8'
showDig 9 = '9'
showDig _ = '!'

showsℕ :   List Char  List Char
showsℕ n xs = go xs n n
  where
  go : List Char      List Char
  go a zero      _       = a
  go a n@(suc _) (suc t) = go (showDig (rem n 10)  a) (n ÷ 10) t
  go a (suc _)   zero    = a

showℕ :   String
showℕ n = pack (showsℕ n [])