HaskellでXorShift

整数型の無限リストという形で疑似乱数が欲しかったのでXorShiftで作ってみました。
これを作る過程でData.WordとBitsを使いましたが、使いやすくてすごく気に入った。
ちなみにC/C++の^記号がXORを意味するのを忘れていて無駄に時間を食ったのは内緒。

import Data.Word
import Bits

xor128 :: Word -> Word -> Word -> Word -> [Word]
xor128 x y z w
    = w' : xor128 y z w w'
    where
    t = x `xor` (x `shiftL` 11)
    w' = (w `xor` (w `shiftR` 19)) `xor` (t `xor` (t `shiftR` 8))

もっと良い書き方があるかもだけど、眠いから今日はここまで。