[Haskell-cafe] Forcing type conversion - probably FAQ(?)
Dusan Kolar
kolar at fit.vutbr.cz
Wed Dec 1 12:28:19 EST 2004
Hello,
I'm trying to make work the following code (I'm using GHCi
with flags -fglasgow-exts -fallow-undecidable-instances):
infixl 6 :+, :-
infixl 6 .+, .-
data TMyExpr = TMyExpr :+ TMyExpr
| TMyExpr :- TMyExpr
| Val Int
| Id String
class MkExpr a b where
(.+) :: a -> b -> TMyExpr
(.-) :: a -> b -> TMyExpr
instance MkExpr Int Int where
(.+) a b = (Val a) :+ (Val b)
(.-) a b = (Val a) :- (Val b)
instance MkExpr Int TMyExpr where
(.+) a b = (Val a) :+ b
(.-) a b = (Val a) :- b
instance MkExpr TMyExpr Int where
(.+) a b = a :+ (Val b)
(.-) a b = a :- (Val b)
instance MkExpr TMyExpr TMyExpr where
(.+) a b = a :+ b
(.-) a b = a :- b
It compiles fine, no problem. Nevertheless, writing
(3::Int) .+ (4::Int)
seems to me quite clumsy, but 3 .+ 4 does not work. :-(
It says the 3 is from class Num and no variant is present
for it, I know, it is not present, but how to force it to
convert it to Int "automatically"? When I try to incorporate
instance (Num a, Num b) => MkExpr a b where
(.+) a b = (Val . round a) :+ (Val . round b)
(.-) a b = (Val . round a) :- (Val . round b)
the situation is even worse. :-(
I tried several modifications, but they don't work either. :-\
I was trying to find the discussion (I wonder whether it
went on the similar topic through the list recently), but
failed. :-(
If someone can just point me to any resource I could study
the possible solutions - maybe I put wrong data to google. ;-)
Or just to stop me, if I'm trying to do impossible... :-\
Thx,
Dusan
More information about the Haskell-Cafe
mailing list