Sha256: c97e33f14ce483ef9c7a9884a68561aa1f58ce9a92230a3b6882130874645089
Contents?: true
Size: 1.08 KB
Versions: 2
Compression:
Stored size: 1.08 KB
Contents
require 'kleisli/monad' module Kleisli class Maybe < Monad attr_reader :value def self.lift(value) if value.nil? None.new else Some.new(value) end end def ==(other) value == other.value end def *(other) self >-> f { other >-> val { Maybe.lift(f.arity > 1 ? f.curry.call(val) : f.call(val)) } } end class None < Maybe def fmap(&f) self end def >(block) self end def or(other) other end def to_s "None" end alias inspect to_s end class Some < Maybe def initialize(value) @value = value end def fmap(&f) Maybe.lift(f.call(@value)) end def >(block) block.call(@value) end def or(other) self end def to_s "Some(#{@value})" end alias inspect to_s end end end Maybe = Kleisli::Maybe.method(:lift) def Maybe(v) Maybe.(v) end def None() Maybe(nil) end def Some(v) Maybe(v) end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kleisli-0.2.1 | lib/kleisli/maybe.rb |
kleisli-0.2.0 | lib/kleisli/maybe.rb |