Tôi có một loại mà về cơ bản đóng vai trò như một thẻ trên một loại dữ liệu:"Kế thừa" thể hiện của kiểu quấn
import Data.Word
data RijndaelField = RF Word8
Tôi muốn RijndaelField
để "kế thừa" những Word8
thể hiện của Bits
theo cách đơn giản nhất có thể:
import Data.Bits
instance Bits RijndaelField where
RF a .&. RF b = RF $ a .&. b
RF a .|. RF b = RF $ a .|. b
RF a `xor` RF b = RF $ a `xor` b
complement (RF a) = RF $ complement a
shift (RF a) n = RF $ shift a n
rotate (RF a) n = RF $ rotate a n
bitSize (RF a) = bitSize a
isSigned (RF a) = isSigned a
testBit (RF a) n = testBit a n
bit n = RF $ bit n
popCount (RF a) = popCount a
Có cách nào ngắn hơn để thể hiện mối quan hệ đó giữa RijndaelField
và Word8
không?
Đó chính xác là những gì tôi đang tìm kiếm, cảm ơn bạn. (Có một phần mở rộng cho tất cả mọi thứ!) – Snowball
@Snowball Chỉ khoảng =) Cái này đặc biệt hữu ích khi gói lên một chồng máy biến áp đơn, bạn có thể có trình biên dịch lấy được những thứ như 'Monad',' Functor', 'MonadTrans',' MonadState MyState', 'Applicative' và hơn thế nữa. Nó rất tiện dụng để tạo ra rất nhiều mã soạn sẵn. – bheklilr