Skip to content

Chaining concepts fails after six steps #24918

Open
@gmpreussner

Description

@gmpreussner

Nim Version

Nim 2.2.4

Description

The following is a minimal repro that I extracted from my actual use case, which is an algebraic type library.

type
  Type1* = concept type t

  Type2* = concept type t
    t is Type1
  
  Type3* = concept type t
    t is Type2

  Type4* = concept type t
    t is Type3

  Type5* = concept type t
    t is Type4

  Type6* = concept type t
    t is Type5

  Type7* = concept type t
    t is Type6

template checkTypes(T: typedesc) =
  doAssert T is Type1    # passes
  doAssert T is Type2    # passes
  doAssert T is Type4    # passes
  doAssert T is Type5    # passes
  doAssert T is Type6    # passes
  doAssert T is Type7    # fails

static:
  checkTypes int8

Current Output

The assertion on `Type7` unexpectedly fails.

Expected Output

The assertion on `Type7` should pass

Known Workarounds

Type7 can be redefined to depend on Type5 instead of Type6:

  Type7* = concept type t
    t is Type5
    copyOfType6Constraints

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions