私は愚かなIRCボットのために関数を作成しようとしていますが、文字の一部がランダムに繰り返されるフレーズを返します。私が持っている問題は、ghc
が好きな乱数を使う方法を見つけることができないということです。 this answerを使用しても、自分のコードをコンパイルするのに特に役立たないようです。でもdo
ブロックを使用して、私はまだInt
を期待するとき、それはIO Int
を発見したコンパイルエラーを取得しています方法関数にIO Int
秒を渡すのトリックと文字を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)
。
'randomBad'はI/Oアクションを使用するので、そのタイプは' String'ではなく 'IO String'でなければなりません。また、必要な輸入品を追加してコードを自己完結型にしてください。 – Jubobs
@Jubobsこれが追加されました。私はこの例では 'System.Random'が必要だと信じています(ボット全体ではおそらくこの質問とは無関係の他のインポートを使用しています)。 – cjm