Skip to content

Pattern matching in class method requires include instead of extend #174

@DawidJanczak

Description

@DawidJanczak

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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions