cats. purity 참조투명성, 순수함수, 부수효과 monoid functor monad reference. fp in scala Composing Software algebraric data types in haskell