Как можно использовать экземплярное чтение в моей основной?
Прямо сейчас у меня есть следующее:
data Term = Monom (Float,Int)
| Addition (Term,Term)
| Subtraction (Term,Term)
| Multiplication (Term,Term)
| Division (Term,Term)
deriving(Show)
instance Read Term where
readsPrec _ inp = let[(a,b)] = lex inp in
case a of
"x" -> readsPrec 0 b
"^" -> [(Monom (1.0,(read b::Int)), "")]
c -> let[(d, "")] = readsPrec 0 b in
[(Monom( (read c::Float),((\(Monom(x,y)) -> y) d)), "")]
--Aufruf: (read "2x^2")::Term
main :: IO ()
main = do
putStrLn "Insert a Term:"
inpStr <- getLine
let outStr = (read inpStr)
putStrLn outStr
Это будет компилироваться/интерпретироваться, но когда я вызываю свой основной и ввожу «2x^2», он просто возвращает «2x^2» вместо Monom (2.0,2). Если вы позвоните (читай "2x^2")::Term, он будет работать нормально, но как мне это сделать в моем основном?
Обычно я бы просто вернулся
(read inpStr)::Term
вместо putStrLn, потому что чтение реализует шоу, но интерпретатор сводит меня с ума... Любая помощь будет оценена