lib/muina/maybe/none.rb in muina-0.6.0 vs lib/muina/maybe/none.rb in muina-0.7.0

- old
+ new

@@ -1,63 +1,130 @@ +# typed: strict # frozen_string_literal: true module Muina class Maybe + # rubocop:disable Metrics/ClassLength + class None < self + class << self + undef_method :some + undef_method :none + end + + Elem = type_member + ElemT = type_template { { upper: Object } } + private_class_method(:new) + sig { void } def initialize # rubocop:disable Lint/MissingSuper freeze end + sig { override.returns T::Boolean } + # (see Maybe#some?) def some? false end + sig { override.returns T::Boolean } + # (see Maybe#none?) def none? true end + sig { override.returns Elem } + # (see Maybe#value!) def value! raise UnwrappingError end + sig do + override.type_parameters(:Default) + .params(default: T.type_parameter(:Default)) + .returns(T.any(Elem, T.type_parameter(:Default))) + end + # (see Maybe#value_or) def value_or(default) default end - def value_or_yield + sig do + override.type_parameters(:T) + .params(_blk: T.proc.returns(T.type_parameter(:T))) + .returns(T.any(Elem, T.type_parameter(:T))) + end + # (see Maybe#value_or_yield) + def value_or_yield(&_blk) yield end + sig { override.returns(T.any(Elem, NilClass)) } + # (see Maybe#value_or_nil) def value_or_nil; end - def and_then + sig { override.params(_blk: T.untyped).returns(T.self_type) } + # (see Maybe#and_then) + def and_then(&_blk) self end - def or_else + sig { override.params(_blk: T.untyped).returns(T.self_type) } + # (see Maybe#or_else) + def or_else(&_blk) yield self end - def map + sig do + override.type_parameters(:T) + .params( + _blk: T.proc.params(arg0: Elem).returns(T.type_parameter(:T)) + ) + .returns(T.any(Maybe[Elem], Maybe[T.type_parameter(:T)])) + end + # (see Maybe#map) + def map(&_blk) self end - def map_none + sig do + override.type_parameters(:T) + .params(_blk: T.proc.returns(T.type_parameter(:T))) + .returns(T.any(Maybe[Elem], Maybe[T.type_parameter(:T)])) + end + # (see Maybe#map_none) + def map_none(&_blk) Maybe.return yield end - def bind + sig do + override.type_parameters(:T) + .params( + _blk: T.proc.params(arg0: Elem).returns(Maybe[T.type_parameter(:T)]) + ) + .returns(T.any(Maybe[Elem], Maybe[T.type_parameter(:T)])) + end + # (see Maybe#bind) + def bind(&_blk) self end - def bind_none + sig do + override.type_parameters(:T) + .params(_blk: T.proc.returns(Maybe[T.type_parameter(:T)])) + .returns(T.any(Maybe[Elem], Maybe[T.type_parameter(:T)])) + end + # (see Maybe#bind_none) + def bind_none(&_blk) yield end + sig { override.params(other: T.untyped).returns(T::Boolean) } + # (see Maybe#==) def ==(other) - self.class == other.class + other.instance_of?(self.class) end end + # rubocop:enable Metrics/ClassLength end end