2017-05-04 72 views
2

我是Haskell的新手,我正在嘗試編寫一個隨機布爾生成器。我能夠生成一個生成隨機布爾值並將其保存到列表中的函數。我想定義一個提取列表值的函數。如何在Haskell中創建一個隨機布爾生成器?

這是我迄今所做的

import System.Random 
import Control.Monad 

makeBool:: Int -> IO [Bool] 
makeBool n = replicateM n randomIO 

extractBool:: IO [Bool] -> Bool 
extractBool x = x !! 0 

不過,我收到此錯誤,請幫助!

* Couldn't match expected type `[Bool]' 
       with actual type `IO [Bool]' 
* In the first argument of `(!!)', namely `x' 
    In the expression: x !! 0 
    In an equation for `extractBool': extractBool x = x !! 0 
Failed, modules loaded: none. 
+3

一旦你進入'IO',你永遠不會離開。制定一個不需要離開的新計劃。 –

回答

1

您可以將結果綁定到一個變量,然後送入任何其他不需要I/O的函數。

import System.Random 
import Control.Monad 

makeBool :: Int -> IO [Bool] 
makeBool n = replicateM n randomIO 

useBoolList :: [Bool] -> String 
useBoolList [] = "" 
useBoolList (x:xs) = (if x == True then "T" else "F") ++ useBoolList xs 

printList = do 
    l <- makeBool 10 
    putStrLn $ useBoolList l 
相關問題