erasure improvements
This commit is contained in:
@@ -114,15 +114,16 @@ join mma = mma >>= id
|
||||
-- Equality
|
||||
|
||||
infixl 1 _≡_
|
||||
data _≡_ : {A : U} -> A -> A -> U where
|
||||
Refl : {A : U} -> {a : A} -> a ≡ a
|
||||
data _≡_ : {0 A : U} -> A -> A -> U where
|
||||
Refl : {0 A : U} -> {a : A} -> a ≡ a
|
||||
|
||||
replace : {A : U} {a b : A} -> (P : A -> U) -> a ≡ b -> P a -> P b
|
||||
replace : {0 A : U} {0 a b : A} -> (P : A -> U) -> a ≡ b -> P a -> P b
|
||||
replace p Refl x = x
|
||||
|
||||
cong : {A B : U} {a b : A} -> (f : A -> B) -> a ≡ b -> f a ≡ f b
|
||||
cong : {0 A B : U} {0 a b : A} -> (f : A -> B) -> a ≡ b -> f a ≡ f b
|
||||
cong f Refl = Refl
|
||||
|
||||
sym : {A : U} -> {a b : A} -> a ≡ b -> b ≡ a
|
||||
sym : {0 A : U} -> {0 a b : A} -> a ≡ b -> b ≡ a
|
||||
sym Refl = Refl
|
||||
|
||||
|
||||
@@ -130,10 +131,10 @@ sym Refl = Refl
|
||||
-- Functor
|
||||
|
||||
class Functor (m : U → U) where
|
||||
map : {0 a b} → (a → b) → m a → m b
|
||||
map : ∀ a b. (a → b) → m a → m b
|
||||
|
||||
infixr 4 _<$>_ _<$_
|
||||
_<$>_ : {0 f} {{Functor f}} {0 a b} → (a → b) → f a → f b
|
||||
_<$>_ : ∀ f. {{Functor f}} {0 a b} → (a → b) → f a → f b
|
||||
f <$> ma = map f ma
|
||||
|
||||
_<$_ : ∀ f a b. {{Functor f}} → b → f a → f b
|
||||
@@ -167,8 +168,8 @@ instance Functor SnocList where
|
||||
infixl 3 _<*>_ _<*_ _*>_
|
||||
class Applicative (f : U → U) where
|
||||
-- appIsFunctor : Functor f
|
||||
return : {0 a} → a → f a
|
||||
_<*>_ : {0 a b} -> f (a → b) → f a → f b
|
||||
return : ∀ a. a → f a
|
||||
_<*>_ : ∀ a b. f (a → b) → f a → f b
|
||||
|
||||
|
||||
_<*_ : ∀ f a b. {{Applicative f}} → f a → f b → f a
|
||||
@@ -188,10 +189,12 @@ instance Traversable List where
|
||||
traverse_ : ∀ t f a b. {{Traversable t}} {{Applicative f}} → (a → f b) → t a → f Unit
|
||||
traverse_ f xs = return (const MkUnit) <*> traverse f xs
|
||||
|
||||
for : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f (t b)
|
||||
-- FIXME - there is something subtly wrong in erasure here. t gets applied and there is no warning about it.
|
||||
-- maybe we don't check the head of an application?
|
||||
for : {0 t : U → U} {0 f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {0 a : U} → {0 b : U} → t a → (a → f b) → f (t b)
|
||||
for stuff fun = traverse fun stuff
|
||||
|
||||
for_ : {t : U → U} {f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {a : U} → {b : U} → t a → (a → f b) → f Unit
|
||||
for_ : {0 t : U → U} {0 f : U → U} → {{Traversable t}} {{appf : Applicative f}} → {0 a : U} → {0 b : U} → t a → (a → f b) → f Unit
|
||||
for_ stuff fun = return (const MkUnit) <*> traverse fun stuff
|
||||
|
||||
instance Applicative Maybe where
|
||||
|
||||
Reference in New Issue
Block a user