| B | C | D deriving Show
Ав томатом (stock) можно дерайвить только "встроенные" штуки. А это явно библиотечная.
Можно руками, через toEnum/fromEnum. Можно через ньютайп, у которого есть instance Enum a => Unbox (CEnum a) и далее data ABCD = A | B | C | D deriving stock (Eq, Ord, Enum, Show) deriving (Unbox) via CEnum ABCD
> Можно руками, через toEnum/fromEnum есть ссылка на такой пример?
Руками надо перегружать тыц и туц, потому что Unbox это, как выяснилось, зонтик над этими двумя. При перегрузке придётся сделать свои реализации двух векторов, добавив их в data instance Vector (CEnum a)/data family MVector m (CEnum a), которые будут хранить, нарпимер, Int. С одной стороны, это долго, но с другой - не сложно, просто запихать Vector Int в data instance Vector (CEnum a) и в каждом реализуемом методе использовать toEnum/fromEnum и такой же метод из Vector Int. newtype CEnum a = CEnum a
Обсуждают сегодня