Я пытаюсь сделать особый тип экземпляром Show.Определение Показать произвольный рекурсивный тип в Haskell
Вот этот тип, это всего лишь базовый тип Set.
data Set a = Insert a (Set a) | EmptySet
Я хотел бы что-то вроде
Insert 1 (Insert 2 (Insert 3 EmptySet))
для отображения как
{1, 2, 3}
Как это сделать? Я попытался сделать это с помощью конкатенации строк, но похоже, что интерполяция строк считается плохой формой (Haskell, похоже, не поддерживает это?) Также, как мне получить фигурные скобки вокруг списка? До сих пор все, что я был в состоянии приготовить был этот, который в основном ничего не делает ...
instance (Show a) => Show (Set a) where
show EmptySet = ""
show (Insert a as) = show a ++ show as
Кроме того, я пытался использовать Hoogle и Hayoo найти реализацию списка, так что я мог видеть, как это было реализовано на Списки. Я не мог найти его. У кого-нибудь есть указатели на это? Я попытался найти «show :: [a] -> String», «Data.Lists», «Lists» и т. Д.
Кстати, это, вероятно, плохая идея. Результат 'show' должен быть действительным кодом Haskell, который дает значение, равное значению, переданному' show'. Я предлагаю определить функцию 'fromList' и сделать' show' на множестве {1, 2, 3}, например, 'fromList [1, 2, 3]'; это подход, используемый стандартными библиотеками Data.Map и Data.Set. Кроме того, вы можете определить свою собственную функцию, которая делает это для вызова вместо 'show' для просмотра наборов в этой нотации. – ehird