ava/docs/revision3.md

1 KiB

given A
def identity: A -> A
    λ x => x
end def

given A
class Semigroup A
    def combine: A -> A -> A
end class

given A :: Semigroup
class Monoid A
    def empty: A
end class

given F *
class Functor
    given A
    given B
    def map: F A -> (A -> B) -> F B
end class

given F * :: Functor
class Apply
    given A
    given B
    def ap: F (A -> B) -> F A -> F B
end class

given F * :: Apply
class Applicative
    given A
    def pure: A -> F A

    def unit: F ()
        pure ()
    end def
end class

given F * :: Apply
class FlatMap
    given A
    given B
    def fmap: F A -> (A -> F B) -> F B

    given A
    def flatten: F (F A) -> F A
        λ ffa => fmap ffa identity
    end def
end class

given F * :: FlatMap, Applicative
class Monad
end class

instance Semigroup Int32
    def combine: Int32 -> Int32 -> Int32
        int32_add
    end def
end instance

given A :: Semigroup
def +: A -> A -> A
    combine
end def

def ex1: Int32 -> Int32
    λ x => x + x
end def

def ex2: Int32 -> Int32
    λ x => combine x x
end def