могу ли я составить список типов в haskell?
У меня есть различные типы данных, которые я определил, и я хочу сделать их все экземпляром класса. можно ли составить список типов и сопоставить экземпляр над ними вместо того, чтобы объявлять их все по отдельности?
Я имею в виду что-то вроде этого:
data Type1 = ...
data Type2 = ...
map (instance ClassName) [Type1, Type2]
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|]])