1 | module Data.HashPSQ.Internal
3 | import Data.NatPSQ.Internal as NatPSQI
4 | import Data.OrdPSQ as OrdPSQ
5 | import Data.OrdPSQ.Internal as OrdPSQI
9 | import Derive.Prelude
12 | %language ElabReflection
19 | data Bucket : (k : Type) -> (p : Type) -> (v : Type) -> Type where
22 | -> OrdPSQI.OrdPSQ k p v
25 | %runElab derive "Bucket" [Eq,Ord,Show]
30 | => OrdPSQI.OrdPSQ k p v
31 | -> Maybe (p, Bucket k p v)
33 | case OrdPSQ.minView opsq of
34 | Just (k, p, x, opsq') =>
35 | Just (p, MkBucket k x opsq')
47 | -> OrdPSQI.OrdPSQ k p v
48 | -> (p, Bucket k p v)
49 | mkBucket k p x opsq =
50 | case toBucket (OrdPSQ.insert k p x opsq) of
54 | assert_total $
idris_crash "Data.HashPSQ.Internal.mkBucket: internal error"
67 | data HashPSQ : (k : Type) -> (p : Type) -> (v : Type) -> Type where
68 | MkHashPSQ : NatPSQI.NatPSQ p (Bucket k p v)
71 | %runElab derive "HashPSQ" [Eq,Ord,Show]