0 | module Data.Singleton
2 | import Decidable.Equality
9 | data Singleton : a -> Type where
10 | Val : (x : a) -> Singleton x
12 | public export %inline
13 | reindex : (0 _ : x === y) -> Singleton x -> Singleton y
16 | public export %inline
17 | unVal : Singleton {a} x -> a
20 | public export %inline
21 | (.unVal) : Singleton {a} x -> a
27 | pure : (x : a) -> Singleton x
31 | (<*>) : Singleton f -> Singleton x -> Singleton (f x)
32 | Val f <*> Val x = Val (f x)
34 | public export %inline
35 | Eq (Singleton v) where
38 | public export %inline
39 | Ord (Singleton v) where
42 | public export %inline
43 | Semigroup (Singleton v) where
46 | public export %inline
47 | {v : a} -> Monoid (Singleton v) where
51 | Show a => Show (Singleton {a} v) where
52 | showPrec p (Val v) = showCon p "Val" (showArg v)
55 | DecEq (Singleton v) where
56 | decEq (Val v) (Val v) = Yes Refl