2017-12-09 14 views
0

関数に数値を描画させ、7より大きい場合は承認メッセージを送信してこの関数を呼び出します。ランダムなIO型のhaskell

ただし、私の機能は「else」にのみ該当します。 「不承認」というメッセージが表示されます。私はそれがフロートでIOフロートタイピングだと思う。これをどうすれば解決できますか?分数のタイプについて[0,1)を使用していますrandomよう

mySort:: Float -> Int 
mySort = ceiling(10 * x) 


numberSort:: IO() 
numberSort = do  
    num <- randomIO :: IO Float 
    print $ mySort num 
    if(num >= 7) then 
     do 
      putStrLn ("approved!" ++ "\n") >> add 
     else 
     do 
      putStrLn "disapproved!" 
+2

'randomIO :: IO Float'は0と1の間の浮動小数点を生成しますので、ここで行うべきことは、' num'と '7'ではなく' 0.7'を比較することです。 –

答えて

3

randomIO作品。

random :: RandomGen g => g -> (a, g) 
randomR

と同じ、しかしタイプによって決まるデフォルトの範囲使用(例えばcharとして有界のインスタンス)有界タイプについて

  • は、範囲は、通常、全タイプであります。
  • 分数型の場合、範囲は通常半閉鎖間隔[0,1]です。 [emphasis mine]
  • Integerの場合、範囲は(任意)Intの範囲です。代わり

使用randomRIO、例えば

num <- randomRIO (0, 10) :: IO Float