2.7 KiB
2.7 KiB
Standard Type Classes
given A
class Semigroup
defn combine: A -> A -> A
end class
given A :: Semigroup
class Monoid
defn empty: A
end class
--- Type class for type constructors which can be mapped over.
---
--- ## Laws
---
--- **Composition**: `fa -> f -> g = fa -> (f ∘ g)`
--- **Identity**: `fa -> ((x) => x) = fa`
given F *
class Functor
--- Transform some wrapped data from one type to another, preserving the
--- wrapper.
---
--- @tparam A The type of input data.
--- @tparam B The type of output data.
--- @param fa The functor input.
--- @param f The function to transform data from `A` to `B`.
given A, B
defn map: F A -> (A -> B) -> F B
end class
given F * :: Functor
class Apply
given A, B
defn ap: F (A -> B) -> F A -> F B
end class
given F * :: Apply
class Applicative
given A
defn pure: A -> F A
fn unit: F #()
λ => pure #()
end fn
end class
--- Any Applicative satisfies Functor.
given F * :: Applicative
instance Functor F
given A, B
fn map: F A -> (A -> B) -> F B
λ fa f => ap (pure f) fa
end fn
end instance
given F * :: Apply
class FlatMap
given A, B
defn fmap: F A -> (A -> F B) -> F B
given A
fn flatten: F (F A) -> F A
λ ffa => fmap ffa (fa => fa)
end fn
end class
given F * :: FlatMap, Applicative
class Monad
end class
given F * :: Monad
instance Functor F
fn map: F A -> (A -> B) -> F B
λ fa f => fmap fa (λ a => pure (f a))
end fn
end instance
given F * *
class Bifunctor
given A, B, C, D
defn bimap F A B -> (A -> C) -> (B -> D) -> F C D
end class
given F * :: Functor
class CoFlatMap
given A, B
defn cofmap: F A -> (F A -> B) -> F B
given A
fn coflatten: F A -> F (F A)
λ fa => cofmap fa (λ f => f)
end fn
end class
given F * :: CoFlatMap
class CoMonad
given A
defn extract: F A -> A
end class
given A
class Show
defn show: A -> String
end class
given A, B
class Eq
defn eq: A -> B -> Boolean
fn neq: A -> B -> Boolean
λ x y => not (eq x y)
end fn
infix =: A -> B -> Boolean
λ x y => eq x y
end infix
infix !=: A -> B -> Boolean
λ x y => neq x y
end infix
end class
enum Comparison
object LessThan
object EqualTo
object GreaterThan
end enum
given A
class Compare
defn compare: A -> A -> Comparison
end class
given A :: Compare
instance Eq A A
fn eq: A -> A -> Boolean
λ x y =>
match compare x y
case EqualTo => true
case _ => false
end match
end fn
end instance
given A
class HashCode
defn hash_code: A -> Int32
end class