Class: Mon::Contract::Monad

Inherits:
MonadContract
  • Object
show all
Defined in:
lib/contracts/monad_contract.rb

Instance Method Summary collapse

Methods inherited from MonadContract

#initialize, #nested_contract, #to_s, #valid_nested_contract?

Constructor Details

This class inherits a constructor from Mon::Contract::MonadContract

Instance Method Details

#valid?(val) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/contracts/monad_contract.rb', line 36

def valid?(val)
  return false unless (val.is_a? Mon::M::Monad)
  case val
  when Mon::M::List
    Mon::C::List.new(@nested_contract).valid?(val)
  when Mon::M::Maybe
    Mon::C::Maybe.new(@nested_contract).valid?(val)
  when Mon::M::Try
    Mon::C::Try.new(@nested_contract).valid?(val)
  when Mon::M::Lazy
    Mon::C::Lazy.new(@nested_contract).valid?(val)
  when Mon::M::Future
    Mon::C::Future.new(@nested_contract).valid?(val)
  when Mon::M::React
    Mon::C::React.new(@nested_contract).valid?(val)
  else
    raise RuntimeError.new("Unrecognized monad: #{ val.class }!")
  end
end