могу ли я составить список типов в haskell?


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

Я имею в виду что-то вроде этого:

data Type1 = ...
data Type2 = ...

map (instance ClassName) [Type1, Type2]
1 5

1 ответ:

Ну на самом деле вы можете, с чем-то вроде

{-# LANGUAGE TemplateHaskell #-}

module T where

class C a

data X = X
data Y = Y
data Z = Z

$(fmap concat $ mapM (\t -> [d|instance C $t|]) [[t|X|], [t|Y|], [t|Z|]])
Но это кажется мне огромным перебором, если вам действительно не нужно, чтобы они создавались автоматически (например, список типов может меняться в зависимости от чего-то).