Don’t fear the Monad

Brian Beckman:

You can understand Monad without too much Category Theory.

Functional Programming = using functions to compose from small functions to very complex software (eg. Nuclear system, driverless car software…).

Advantages of Functional Programming:

  • Strong Types Safety: detect bugs at compile time.
  • Data Protection thru Immutability: Share data safely in Concurrent / Parallel processing.
  • Software ‘Componentisation’ ie Modularity : Each function always returns the same result, ease of software reliability testing.

Each “small” function is a Monoid.
f : a -> a (from input of type ‘a‘ , returns type ‘a’)
g: a -> a

compose h from f & g : (strong TYPING !!)
h = f。g : a -> a

[Note] : Object in Category, usually called Type in Haskell, eg. ‘a’ = Integer)

You already know a Monoid (or Category in general) : eg Clock

  1. Objects: 1 2 3 …12 (hours)
  2. Arrow (Morphism): rule “+”:

    7 + 10 = 17 mod 12 = 5

    • Law of Associativity:
      x + (y + z) = (x + y) + z
    • Identity (or “Unit”): (“12”):
      x + 12 = 12 + x = x

    More general than Monoid is a “Monoidal” Category where: (instead of only single object ‘a’, now more “a b c…”)
    f : a -> b
    g: b -> c
    h = f。g : a -> c

    Function under composition Associative rule and with an Identity => Monoid

    Monad (M): a way to manage the side-effects (I/O, exception , SQL Database, etc) within the Functional Programming way like monoidal categories: ie associative composition, identity.

    Remark: For the last 60 years in Software, there have been 2 camps:

    1. Bottom-Up Design: from hardware foundation, build performance-based languages: Fortran, C, C++, C#, Java…
    2. Top-Down Design: from Mathematics foundation, build functional languages (Lambda-Calculus, Lisp, Algo, Smalltalk, Haskell…).
    3. F# (Microsoft) is the middle-ground between 1 & 2.

    Ref: What is a Monad ?

    Monad = chaining operations with binding “>>=”

    • Possible use: allows to write mini-language, parser…

    《知乎》https://zhuanlan.zhihu.com/p/29542641?from=timeline

    Advertisements

    2 thoughts on “Don’t fear the Monad

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s