к
Size: a a a
ЗП
Tagged has kind k -> * -> *ЗП
A
A
A
MK
A
data Item = Item String
class HasTag a t
newtype Sorted a = Sorted a
instance {-# OVERLAPS #-} HasTag "sorted" (Sorted a)
instance HasTag t a => HasTag t (Sorted a)
newtype Positive a = Positive a
instance {-# OVERLAPS #-} HasTag "positive" (Positive a)
instance HasTag t a => HasTag t (Positive a)
testFn :: (Coercible a Item, HasTag "sorted" a, HasTag "positive" a) => a -> String
testFn (coerce -> Item s) = s
res = testFn (Positive (Sorted (Item "res")))
res' = testFn (Sorted (Positive (Item "res")))
A