leaving aside the question of whether its a good idea, here's how to get it to compile:
with devel and new-style concepts: type Concept0* = concept proc copy_C0(x:Self):Self proc init_C0(x:var Self) Concept1* = concept proc copy_C1(s:Self,x:Concept0):Self proc init_C1(s:var Self,x:Concept0) Concept2* = concept proc copy_C2(s:Self,x:Concept1):Self proc init_C2(s:var Self,x:Concept1) Run with old-style concepts: type Concept0* = concept c,var v,type t copy_C0(c) is t init_C0(v) Concept1*[T:Concept0] = concept c, var v, type t copy_C1(c,T) is t init_C1(v,T) Concept2*[T:Concept1] = concept c,var v, type t copy_C2(c,T) is t init_C2(v,T) Run