我正在尝试为一个愚蠢的IRC机器人创建一个函数,它将返回一个短语,其中一些字母重复一次随机。我遇到的问题是我找不到使用ghc
喜欢的随机数的方法。似乎即使使用this answer对我的代码编译也没有特别的帮助。
import System.Random
-- Write bad
baaad x y = "B" ++ (repeatA x) ++ "D " ++ (exclaim y)
-- StartHere
randomBad :: String
randomBad = do
x <- randomRIO(5,10) :: IO Int
y <- randomRIO(0,6) :: IO Int
return $ baaad x y
repeatA :: Int -> String
repeatA x = rptChr "A" x
exclaim :: Int -> String
exclaim x = rptChr "!" x
rptChr :: String -> Int -> String
rptChr x y = take y (cycle x)
即使使用do
块并将IO Int
传递给函数的技巧,我仍然会遇到编译错误,当它期待{时,它会找到IO Int
{1}}。
答案 0 :(得分:2)
randomBad
不在IO monad中....它是String
类型,但您将其定义为类型IO String
更改此
randomBad :: String
到这个
randomBad :: IO String
然后你应该能够在另一个IO动作中使用它,比如main:
main = do
theString <- randomBad
putStrLn theString