newtype pattern matching and mmorph
note about impredicative ($)