Я пытаюсь создать функцию для глупых ботов IRC, которые вернут фразу, где некоторые буквы повторяются случайным числом раз. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ использовать случайные числа, которые нравится ghc
. Похоже, что даже использование this answer не особенно полезно для компиляции моего кода.Повторите символ случайное число раз в Haskell
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
S функции таким образом, я все еще получаю ошибку компиляции, что он нашел в IO Int
когда ожидается Int
.
Поскольку 'randomBad' использует операции ввода-вывода, его тип должен быть' IO String', а не 'String'. Кроме того, сделайте свой код самодостаточным, добавив требуемый импорт. – Jubobs
@Jubobs Теперь добавлено. Я считаю, что «System.Random» - это все, что мне нужно для этого примера (весь сам бот использует кучу других импортов, которые, вероятно, не имеют отношения к этому вопросу). – cjm