module FunctionPattern; type T := | A : T; f : (T → T) → T | A := A;