У меня есть тип записи 4 Word32.
data MyType = MyType {a :: Word32, b :: Word32, c :: Word32, d :: Word32 }
В большинстве случаев я хочу рассматривать этот тип как 4 отдельных Word32. Однако иногда я хочу рассматривать его как единый поток двоичных данных (длиной 128 бит, конкатенация 4 Word32). Я знаю, что в Python я бы написал разные функции доступа для этой «структуры», чтобы я мог читать/изменять ее обоими способами. Но это Хаскель. Мне интересно, как бы поступил с этим опытный Haskeller?
MyType
это поле должно быть вычислено немедленно. 03.07.2011(.|.)
— это оператор побитового ИЛИ. Он принимает два двоичных числа и делает что-то вродеzipWith (||)
для их битов. Таким образом,5 .|. 2
будет (двоичным) 101 .|. 010 и результат 111, что равно 7. Короче говоря:5 .|. 2 == 7
. Складка в основном берет числа, сдвигает их в правильное положение, а затем подставляет их к результирующему числу. 03.07.2011