···11+# frozen_string_literal: true
22+33+class Literal::Something < Literal::Maybe
44+ def initialize(value)
55+ @value = value
66+ freeze
77+ end
88+99+ def empty? = false
1010+ def inspect = "Something(#{@value.inspect})"
1111+1212+ def value_or(_fallback)
1313+ @value
1414+ end
1515+1616+ def map
1717+ Something(yield @value)
1818+ end
1919+2020+ def flatmap
2121+ map(yield(@value)).value_or(Nothing)
2222+ end
2323+2424+ def or_else(_alternative)
2525+ self
2626+ end
2727+end
-2
lib/literal/types.rb
···11# frozen_string_literal: true
2233module Literal::Types
44- extend self
55-64 def _Union(*types)
75 raise Literal::ArgumentError, "Union type must have at least two types." if types.size < 2
86
+11
test/literal/operation.rb
···11+# frozen_string_literal: true
22+33+class SomeOperation < Literal::Operation
44+ def call
55+ end
66+end
77+88+test do
99+ result = SomeOperation.call
1010+ binding.irb
1111+end