data Region = UnitCircle | Scale Float Region | Union Region Region example = Union (Scale 2.0 UnitCircle) UnitCircle interp :: Region -> ((Float,Float) -> Bool) interp UnitCircle (x,y) = x*x+y*y <= 1 interp (Scale s r) (x,y) = interp r (x*s,y*s) interp (Union r1 r2) p = interp r1 p || interp r2 p