Haskell在main中使用实例化读取与Type



如何在我的主中使用实例化读取?

现在我有以下内容:

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 

相关内容

最新更新