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
%