Sha256: 0efaa7bef667a5eb241aa97327ac9e13e02cc55586e7dfab3aed63fb5ed6a3bc
Contents?: true
Size: 640 Bytes
Versions: 3
Compression:
Stored size: 640 Bytes
Contents
require 'kleisli' module Dry module Data class SumType attr_reader :left attr_reader :right def initialize(left, right) @left, @right = left, right end def name [left, right].map(&:name).join(' | ') end def call(input) begin value = left[input] if left.valid?(value) value else right[value] end rescue TypeError right[input] end end alias_method :[], :call def valid?(input) left.valid?(input) || right.valid?(input) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-data-0.4.2 | lib/dry/data/sum_type.rb |
dry-data-0.4.1 | lib/dry/data/sum_type.rb |
dry-data-0.4.0 | lib/dry/data/sum_type.rb |