0

私はHaskellが初めてです。を使用してユーザーから Int 値を取得する関数が必要です

putStr "Please Enter Your Number : "
submit_ans<- getLine

一連の計算の後、それを呼び出した別の関数によって使用される別の Int が返されます。記述された関数の型は何ですか? 最後に return 関数を使用する必要がありますか?

前もって感謝します!

更新 #1

わかりました私は以下のように機能を更新しました:

myFunction ::  Int -> IO Int 
myFunction action = do

      putStr "\tPlease Enter Your Number : "            
      submit_ans <- getLine 

      if action == 1
        then do 
       myFunctionII read submit_ans  
        else do
       putStrLn("\n")

それは私にこのエラーを与えます:

*** Term           : myFunction 
*** Type           : Int -> IO Int
*** Does not match : IO a
4

3 に答える 3

2

putStrLntypeがあり、 typeがString -> IO ()あるように見えるため、両方のブランチが返すので、の型は次のようになります。myFunctionIIInt -> IO ()myFunctionInt -> IO ()ifIO ()

myFunction :: Int -> IO ()
myFunction action = do
  putStr "\tPlease Enter Your Number : "
  submit_ans <- getLine

  if action == 1
     then myFunctionII (read submit_ans)
     else putStrLn "\n"
于 2013-01-25T13:12:56.993 に答える
2

gタイプ の純粋な計算として、関数、たとえば を書くだけInt -> Intです。次に、IOモナドで次のように使用します

...
putStr "Please Enter Your Number : "
submit_ans <- getLine
let i = g (read submit_ans)
...
print i

編集: Haskell 値はすべて純粋です。関数は純粋です。IO x純粋な Haskell 値です。しかし、それはシステムによって実行される不純な計算を記述しています (たとえば、コンパイルされたアプリケーションが実行されるとき)。実行の一部として純粋な関数を実行します。

于 2013-01-25T10:39:07.177 に答える
1

あなたはIO操作を実行していて、戻ってきているIntので、私の最善の推測はそうでしょうがIO Int、あなたの質問は曖昧すぎて明確に答えることができないため、はっきりとはわかりません。

于 2013-01-25T10:05:56.820 に答える