
9 Mar
2010
9 Mar
'10
1:24 a.m.
On 03/08/2010 10:45 PM, Wolfgang Jeltsch wrote:
The point is, of course, that such conversions are not only possible for binary operations but for arbitrary values and that these conversions are done by a single generic function conv. I don’t think it would be possible to implement conv without generalized newtype deriving.
Any thoughts?
Hi Wolfgang, it's not exactly the same, but...
import Control.Applicative
newtype Wrapped a = Wrap a deriving Show
instance Functor Wrapped where fmap f (Wrap x) = Wrap $ f x
instance Applicative Wrapped where pure = Wrap (Wrap f) <*> (Wrap x) = Wrap $ f x
convBinOp :: (a -> a -> a) -> (Wrapped a -> Wrapped a -> Wrapped a) convBinOp op x y = pure op <*> x <*> y
Best regards, Steffen