如何在我的主中使用实例化读取?
现在我有以下内容:
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
这将编译/解释,但是当我调用我的 main 并输入"2x^2"时,它只返回"2x^2"而不是 Monom(2.0,2)。如果你打电话(读"2x^2")::术语它会正常工作,只是我如何在我的主菜中做到这一点?
正常我会回来
(read inpStr)::Term
而不是 putStrLn,因为阅读工具显示,但解释器让我发疯......任何帮助都将得到赞赏
您可以在 let
中使用类型限定符。您的main
如下所示:
main :: IO ()
main = do
putStrLn "Insert a Term:"
inpStr <- getLine
let outStr = read inpStr :: Term
putStrLn $ show outStr