dry-monads icon indicating copy to clipboard operation
dry-monads copied to clipboard

Pattern matching in class method requires `include` instead of `extend`

Open DawidJanczak opened this issue 1 year ago • 0 comments

Describe the bug

When pattern matching inside a class method an include Dry::Monads[:maybe] is needed, the extend Dry::Monads[:maybe] is not enough and causes a crash.

To Reproduce

Simple script:

class Foo
  include Dry::Monads[:maybe]
  extend Dry::Monads[:maybe]

  def self.foo
    case Some(4)
    in Some(a)
      puts a
    in None()
      puts 'none'
    end
  end
end

Removing any include or extend will cause this script to fail:

  1. Removing extend causes Some(4) to raise NoMethodError: undefined method Some' for Foo:Class` (makes sense)
  2. Removing extend causes Some(a) to raise NameError: uninitialized constant Foo::Some (?)

Expected behavior

Ideally I'd like to only have to extend Dry::Monads[:maybe] for a class method, not both.

My environment

  • Affects my production application: NO
  • Ruby version: 3.1.4p223
  • OS: Docker (Alpine)

DawidJanczak avatar Oct 04 '23 01:10 DawidJanczak