計算機科学のブログ

HaskellのI/O バイナリデータの操作 JPEGのグリッチング ランダムなバイトを挿入する System.Randomモジュール、randomRIO関数

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT4(HaskellのI/O)、LESSON25(バイナリデータの操作)、25.2(JPEGのグリッチング)、ランダムなバイトを挿入する、クイックチェック 25-3の解答を求めてみる。

コード

import System.Random

randomChar :: IO Char
randomChar = do
  charVal <- randomRIO (0, 255)
  return $ toEnum charVal

p :: IO ()
p = do
  rc <- randomChar
  putStrLn $ replicate 10 '-'
  print rc
  putStrLn [rc]

main :: IO ()
main =
  mapM_ (const p) [1 .. 50]

入出力結果(Terminal, Zsh)

% runghc sample03.hs
----------
'l'
l
----------
'\202'
Ê
----------
'\172'
¬
----------
'/'
/
----------
'\212'
Ô
----------
'\''
'
----------
'6'
6
----------
'\t'
	
----------
'\173'
­
----------
'\b'

----------
'\170'
ª
----------
'\196'
Ä
----------
'\186'
º
----------
'l'
l
----------
'm'
m
----------
'['
[
----------
'\137'
‰
----------
' '
 
----------
'8'
8
----------
'w'
w
----------
']'
]
----------
'\207'
Ï
----------
'\142'
Ž
----------
'\210'
Ò
----------
'`'
`
----------
'g'
g
----------
'G'
G
----------
'r'
r
----------
'\166'
¦
----------
'\140'
Œ
----------
'\141'

----------
'0'
0
----------
'\128'
€
----------
'\148'
”
----------
'>'
>
----------
'\229'
å
----------
'['
[
----------
'\163'
£
----------
'\252'
ü
----------
'\v'


----------
'\204'
Ì
----------
'\244'
ô
----------
'H'
H
----------
'5'
5
----------
'\189'
½
----------
'#'
#
----------
'L'
L
----------
'K'
K
----------
'\176'
°
----------
'J'
J
%