Получите тип данных записи без шаблона haskell

Итак, я немного поигрался с GHC.Generics, которые великолепны, но кажутся ограниченными / сосредоточены в основном на генерации экземпляров.

Что я хотел бы сделать, если это возможно, это получить новый тип данных из другого.

Допустим, у вас есть следующий тип:

data Xpto = Xpto {
    fstt :: First Int
    lstt :: Last String }

Я хотел бы получить следующий тип данных "бесплатно":

data Xpto' = Xpto' {
   fstt' :: Int
   lstt' :: String }

Одна возможность, которую я рассмотрел, состояла в том, чтобы использовать семейства типов, но тогда новые данные должны были бы получить тот же вид, что и Xpto:

class Xptos newtyped where
   type UnNewTyped un :: (same kind as newtyped)

Я начинаю думать, что все это невозможно, и я уверен, что для этого есть веские причины.

Примечание 1: я знаю, что это возможно с Template Haskell... просто интересно, есть ли другой способ.

0 ответов

Другие вопросы по тегам