我是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.
答案 0 :(得分: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