discard """ output: "" """ import sugar import macros block distinctBase: block: type Foo[T] = distinct seq[T] var a: Foo[int] doAssert a.type.distinctBase is seq[int] block: # simplified from https://github.com/nim-lang/Nim/pull/8531#issuecomment-410436458 macro uintImpl(bits: static[int]): untyped = if bits >= 128: let inner = getAST(uintImpl(bits div 2)) result = newTree(nnkBracketExpr, ident("UintImpl"), inner) else: result = ident("uint64") type BaseUint = UintImpl or SomeUnsignedInt UintImpl[Baseuint] = object Uint[bits: static[int]] = distinct uintImpl(bits) doAssert Uint[128].distinctBase is UintImpl[uint64]