0

メインでインスタンス化された読み取りを使用するにはどうすればよいですか?

現在、私は次のものを持っています:

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」と入力すると、Monom(2.0,2) ではなく「2x^2」が返されます。(read "2x^2")::Term を呼び出すと、正常に動作しますが、メインでどのように行うのですか?

通常、私はただ戻ってきます

(read inpStr)::Term  

read は show を実装していますが、インタープリターが私を夢中にさせているため、putStrLn の代わりに...

4

1 に答える 1

1

で型修飾子を使用できますlet。あなたmainは次のようになります:

main :: IO ()
main = do
   putStrLn "Insert a Term:"
   inpStr <- getLine
   let outStr = read inpStr :: Term
   putStrLn $ show outStr 
于 2014-11-25T09:38:37.707 に答える