Randomパッケージのインストール
多分、--lib
をつけないとexecutableじゃないと怒られる。
$ brew install cabal-install $ cabal update $ cabal install --lib random
random関数
random関数はジェネレーターgを受け取り、乱数aとジェネレーターgを返す。
ghci> import System.Random ghci> :t random random :: (Random a, RandomGen g) => g -> (a, g)
ghci> random (mkStdGen 100) (-3633736515773289454,693699796 2103410263) ghci> random (mkStdGen 100) (-3633736515773289454,693699796 2103410263)
同じジェネレーターだと参照透過性が保たれているのがわかる。
mkStdGen
は整数値を引数にとりその値を元にするジェネレーターを返す。
ghci> :t mkStdGen mkStdGen :: Int -> StdGen
返却される乱数の型は型注釈で指定できる。
ghci> random (mkStdGen 100) :: (Int, StdGen) (-3633736515773289454,693699796 2103410263) ghci> random (mkStdGen 100) :: (Bool, StdGen) (True,4041414 40692)
byteString
byteStringはリストのような1バイト固定の列データ。リスト同じく遅延読み込みを行うが、最初のデータを評価した時に最後まで評価をする。または、64Kバイト(チャンク)ずつ評価を行う。
リストをbyteStringにpackする。
ghci> import qualified Data.ByteString as S ghci> import qualified Data.ByteString.Lazy as B ghci> B.pack [99, 97, 110] "can" ghci> B.pack [98..120] "bcdefghijklmnopqrstuvwx"
byteStringをリストにunpackする。
ghci> B.unpack $ B.pack [98..120] [98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120]
byteStringの先頭に値を追加する。cons
関数を使用する。
ghci> B.cons 85 $ B.pack [80,81,82,84] "UPQRT"
ファイルをbyteStringに格納する
B.readFile "data.txt"
リンク
リンク