2013-02-25 4 views
-1

하스켈에 계산기를 구현하여 언어를 닦으려고했지만 사용자가 q을 입력 할 때까지 무한 루프를 입력하기를 원할 때 주전산기에 걸렸습니다. Heres는 내 주요 당신이 내가 잘못하고 병은 또한 당신의 할 일 문하스켈 무한 루프

compute e 
evaluate_input 

두 함수에서 내 오류

error: No instances for (Floating (IO a0), Read (IO a0)) 
     arising from a use of `compute' 
    Possible fix: 
     add instance declarations for (Floating (IO a0), Read (IO a0)) 
    In a stmt of a 'do' block: compute e 
    In the expression: 
     do { compute e; 
      evaluate_input } 
    In an equation for `evaluate_expression': 
     evaluate_expression e 
      = do { compute e; 
       evaluate_input } 
+0

를 사용할 수 있습니까? – us2012

+1

어떤 시점에서'IO x' 유형의 값을'읽으려고합니다. 아마도 당신이 포스팅하는 것을 꺼리지 않는 함수 일 것입니다. 좋은 소식은 GHC가 정확히 어떤 라인이 오류를 일으키는지를 말해야한다는 것입니다 : –

+0

@ us2012 compute :: (a, Num a, a 분수 읽기) => 문자열 -> a – CodeNewbie

답변

3

을 게시 뭘하는지 볼 같은 모나드 될 필요가 있다면 알려주세요 여기서, IO (evaluate_input :: IO()으로 선언). 그래서 GHC는 computeString e를 취하고 IO a0 (== a)을 반환하는 함수라고 기대할 수 있습니다. 그러나 IO a0Floating 또는 Reada이어야하는 인스턴스이므로 a0을 찾을 수 없습니다.

난 당신이 출력 계산의 결과한다고 가정 것 (그리고 aShow보다는 Read의 인스턴스), 그래서`compute`의 정의의

do 
putStrLn . show $ compute e 
evaluate_input 
+0

sooooo 고맙습니다 !!!!! – CodeNewbie