2017-03-13 10 views
1

移動しきい値に基づいてランダム化されたブール値のリストを生成しようとしています。Haskell:リスト操作の中でIOアクションを実行して値を抽出する

これは私のコードです。問題の関数はisActionRandom次のとおりです。私が意図したとおりに作成したリストは、タイプ[IO Bool]ないIO [Bool]あるので

randomBool :: Int -> IO Bool 
randomBool p = do n <- randomRIO(1,100) 
       return (if n > p then True else False) 

isActionRandom :: Float -> Int -> Int -> Int -> IO [Bool] 
isActionRandom eps n m step = [ randomBool (floor (eps-(0.01*y) * 100)) 
          | x <- [1..(n*m)] 
          , y <- floor(x/(m*step))] 

isActionRandomはコンパイルされません。各反復でIO関数からブール値を「抽出」し、目的のタイプのリストを作成するにはどうすればよいですか?

+1

非常にマイナーな簡素化あなたが好きかもしれません:

sequence :: (Traversable t, Monad m) => t (m a) -> m (t a) 

をお使いの場合は、タイプを持つことになります '場合は、他の真偽のfoo '=' foo'です。 –

答えて

2

あなたはTraversableからsequenceメソッドを使用することができます。

sequence :: [IO Bool] -> IO [Bool] 
関連する問題