Вопрос 1: У меня есть определение для типа дерева:Haskell: как использовать «получение шоу» и функтор?
data Tree a = Node a (Tree a) (Tree a) |Empty
Используйте Показать класс типов для выполнения шоу-функции. Дерево вроде Node 10 (Node 20 Empty (Node 6 Empty Empty)) (Node 30 Empty Empty)) должно отображаться как (10 (20 x 6) 30). Таким образом, узел с двумя пустыми ветвями не должен быть заключен в скобки.
Мой код выглядит следующим образом:
data Tree a = Node a (Tree a) (Tree a) |Empty deriving (show)
--input
*Main>>Node 10 (Node 20 Empty (Node 6 Empty Empty)) (Node 30 Empty Empty))
--output
*Main>>Node 10 (Node 20 Empty (Node 6 Empty Empty)) (Node 30 Empty Empty))
Есть ли способ, чтобы изменить его, пусть выход:
(10 (20 x 6) 30)
Вопрос 2:
Используйте класс функтора для определения fmap для этого типа?
(Как я могу реализовать выше использования функции функтора?)
Ну, это результат, который может восстановить вход - между его двумя объектами и их представлениями есть взаимно однозначное отображение. Итак, все, что нужно, - это соответствующая реализация 'Read', правильно? – amalloy
@amalloy: Ну, если какой-либо 'a' производит выходные данные с пробелами и без разделителей (например, по умолчанию для' получения Show'), это будет сложно ... Я полагаю, что в случае необходимости можно будет проверить их и в скобках , – Ryan
Я имею в виду, вы будете использовать экземпляр 'Read' для' a', который решает вашу проблему, не так ли? И ваше возражение одинаково хорошо относится к экземпляру по умолчанию, создаваемому 'deriving Show', я думаю, поэтому это не должно быть проблемой. – amalloy