1 {-# LANGUAGE UndecidableInstances #-}
2 {-# OPTIONS_GHC -fno-warn-orphans #-}
3 {-# OPTIONS_GHC -fconstraint-solver-iterations=7 #-}
4 -- | Symantic for 'Unit'.
5 module Hcompta.LCC.Sym.Unit where
7 -- import Data.Decimal (Decimal)
9 import Data.Function (($), (.))
10 import Data.Maybe (Maybe(..))
13 import Data.Type.Equality ((:~:)(Refl))
14 import Text.Show (Show(..))
15 import qualified Data.Text as Text
16 import qualified Language.Symantic.Typing as Sym
18 import Hcompta.LCC.Amount
20 import Language.Symantic.Parsing
21 import Language.Symantic.Typing
22 import Language.Symantic.Compiling
23 import Language.Symantic.Interpreting
24 import Language.Symantic.Transforming.Trans
25 import qualified Language.Symantic.Lib as Sym
28 class Sym_Unit term where
29 unit :: Unit -> term Unit
30 default unit :: Trans t term => Unit -> t term Unit
31 unit = trans_lift . unit
33 type instance Sym_of_Iface (Proxy Unit) = Sym_Unit
34 type instance TyConsts_of_Iface (Proxy Unit) = Proxy Unit ': TyConsts_imported_by (Proxy Unit)
35 type instance TyConsts_imported_by (Proxy Unit) =
41 instance Sym_Unit HostI where
43 instance Sym_Unit TextI where
44 unit a = TextI $ \_p _v ->
46 instance (Sym_Unit r1, Sym_Unit r2) => Sym_Unit (DupI r1 r2) where
47 unit x = unit x `DupI` unit x
50 ( Read_TyNameR TyName cs rs
52 ) => Read_TyNameR TyName cs (Proxy Unit ': rs) where
53 read_TyNameR _cs (TyName "Unit") k = k (ty @Unit)
54 read_TyNameR _rs raw k = read_TyNameR (Proxy @rs) raw k
55 instance Show_TyConst cs => Show_TyConst (Proxy Unit ': cs) where
56 show_TyConst TyConstZ{} = "Unit"
57 show_TyConst (TyConstS c) = show_TyConst c
59 instance Proj_TyFamC cs Sym.TyFam_MonoElement Unit
61 instance -- Proj_TyConC
62 ( Proj_TyConst cs Unit
63 , Proj_TyConsts cs (TyConsts_imported_by (Proxy Unit))
64 ) => Proj_TyConC cs (Proxy Unit) where
65 proj_TyConC _ (TyConst q :$ TyConst c)
66 | Just Refl <- eq_skind (kind_of_TyConst c) SKiType
67 , Just Refl <- proj_TyConst c (Proxy @Unit)
69 _ | Just Refl <- proj_TyConst q (Proxy @Eq) -> Just TyCon
70 | Just Refl <- proj_TyConst q (Proxy @Ord) -> Just TyCon
71 | Just Refl <- proj_TyConst q (Proxy @Show) -> Just TyCon
73 proj_TyConC _c _q = Nothing
74 data instance TokenT meta (ts::[*]) (Proxy Unit)
75 = Token_Term_Unit Unit
76 deriving instance Eq_Token meta ts => Eq (TokenT meta ts (Proxy Unit))
77 deriving instance Show_Token meta ts => Show (TokenT meta ts (Proxy Unit))
80 Inj_TyConst cs Unit =>
81 CompileI cs is (Proxy Unit) where
84 Token_Term_Unit i -> k (ty @Unit) $ TermO $ \_c -> unit i
86 -- Inj_Token meta ts Unit =>
87 TokenizeT meta ts (Proxy Unit)
88 instance Gram_Term_AtomsT meta ts (Proxy Unit) g