Я пытаюсь использовать переменную типа в теле where экземпляра типа. Но GHC
не используйте переменную типа для функций в экземпляре типа.
Я пытаюсь реализовать класс типа Bits
для [a]
.
instance forall a. Bits a => Bits [a] where
xor = zipWith xor
rotateL list dis = keeped .|. overlap
where
overlap = tail moved ++ [head moved]
(keeped, moved) = unzip $ map (\n -> let rot = rotate n dis in (rot.&.mask, rot.&.filter)) list
mask = (complement 0) `shiftL` dis -- this line
filter = complement mask
GHC говорит:
Could not deduce (Num a) arising from the literal ‘0’
Ожидаемое:
То, что 0
ожидается как тип a
, который является переменной типа, как определено в instance forall a. Bits a => Bits [a]