在Haskell中随机重复一次字符

时间:2016-03-26 06:23:17

标签: haskell random

我正在尝试为一个愚蠢的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}}。

1 个答案:

答案 0 :(得分:2)

randomBad不在IO monad中....它是String类型,但您将其定义为类型IO String

更改此

randomBad :: String

到这个

randomBad :: IO String

然后你应该能够在另一个IO动作中使用它,比如main:

main = do
  theString <- randomBad
  putStrLn theString