summaryrefslogtreecommitdiff
path: root/src/Data.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2025-02-25 23:56:16 +0100
committerTom Smeding <tom@tomsmeding.com>2025-02-25 23:56:16 +0100
commit7fa10a9a07c7160531baf595d1111277c17a38b2 (patch)
tree24b7263da33490d954b063926d509e1a10193687 /src/Data.hs
parent2c2b80264ae5777f0a759abb5571cbe68071c7e7 (diff)
Compile: Emit structs in proper order
Diffstat (limited to 'src/Data.hs')
-rw-r--r--src/Data.hs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/Data.hs b/src/Data.hs
index 0be9046..8005737 100644
--- a/src/Data.hs
+++ b/src/Data.hs
@@ -77,6 +77,14 @@ fromSNat :: SNat n -> Int
fromSNat SZ = 0
fromSNat (SS n) = succ (fromSNat n)
+unSNat :: SNat n -> Nat
+unSNat SZ = Z
+unSNat (SS n) = S (unSNat n)
+
+fromNat :: Nat -> Int
+fromNat Z = 0
+fromNat (S m) = succ (fromNat m)
+
class KnownNat n where knownNat :: SNat n
instance KnownNat Z where knownNat = SZ
instance KnownNat n => KnownNat (S n) where knownNat = SS knownNat
@@ -124,6 +132,7 @@ unsafeCoerceRefl = unsafeCoerce Refl
data Bag t = BNone | BOne t | BTwo (Bag t) (Bag t) | BMany [Bag t]
deriving (Show, Functor, Foldable, Traversable)
+-- | This instance is mostly there just for 'pure'
instance Applicative Bag where
pure = BOne
BNone <*> _ = BNone