enum Purity2[a: Type, b: Type, c: Type, ef: Eff]
case Pure(a -> (b -> c))
case Impure(a -> (b -> c \ ef))