   (-mappend [s sv sv'] "An associative addition operation."))
 
 (defprotocol Monoid
-  "A Semigroup which has an identity element for is associative binary operation."
+  "A Semigroup which has an identity element with respect to an associative binary operation."
   (-mempty [s] "The identity element for the given monoid."))
 
 (defprotocol Extract
-  "A type class responsible of extract the
+  "A type class to extract the
   value from a monad context."
   (-extract [mv] "Extract the value from monad context."))
 

    "Applies the function(s) inside af's context to the value(s)
     inside av's context while preserving the context.")
  (-pure [app v]
    "Takes any context monadic value ctx and any value v, and puts
     the value v in the most minimal context of same type of ctx"))

(defprotocol Foldable
  "Abstraction of data structures that can be folded to a summary value."

  "A marker protocol for identifying the valid context types."
  (-get-level [_] "Get a context priority level."))

 (defprotocol Contextual
  "Abstraction that establishes a concrete type as a member of a context.

  A great example es Maybe monad type Just. It implements
  this abstraction to establish that Just is part of
  the Maybe monad."
  (-get-context [_] "Get the context associated with the type."))

(defprotocol Printable
  "An abstraction to make a type printable in a platform
  independent manner."
  (-repr ^String [_] "Get the repl ready representation of the object."))

