簡體   English   中英

Haskell將實例讀入main與Type一起使用

[英]Haskell use instanced Read in main with Type

如何在我的main中使用實例讀取?

現在我有以下內容:

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”):: Term它將正常工作,請問我該怎么做?

通常我會回來

(read inpStr)::Term  

而不是putStrLn,因為顯示了讀取工具,但是解釋器讓我發瘋了……任何幫助都將被申請

您可以在let使用類型限定符。 您的main看起來像這樣:

main :: IO ()
main = do
   putStrLn "Insert a Term:"
   inpStr <- getLine
   let outStr = read inpStr :: Term
   putStrLn $ show outStr 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM