У меня есть тип, который в основном действует в качестве метки на другой тип данных:«Наследование» экземпляр завернутые типа
import Data.Word
data RijndaelField = RF Word8
Я хочу RijndaelField
на «унаследует» в Word8
экземпляр Bits
в наиболее простым способом:
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
есть ли более короткий путь, чтобы выразить, что соотношение между RijndaelField
и Word8
?
Это именно то, что я искал, спасибо. (Существует расширение для всего!) – Snowball
@Snowball Только около =) Это особенно полезно при упаковке стека монадных трансформаторов, вы можете заставить компилятор получить такие вещи, как «Monad», «Functor», «MonadTrans», MonadState MyState', 'Applicative' и многое другое. Это очень удобно для создания большого количества шаблонов. – bheklilr