Задать вопрос
Anya_Koya
@Anya_Koya
Ничтожество, отягощённое борьбой с прокрастинацией

Как избавиться от скобок в Haskell'е?

Вот мой код на Haskell'е:
infixl 6 :$:
data ExE  =  ExData Integer | ExE :$: ExE deriving (Show, Eq)

simplify                       :: ExE -> ExE
simplify ((a1 :$: a2) :$: a3)  =  simplify a1 :$: simplify a2 :$: simplify a3
simplify (a1 :$: (a2 :$: a3))  =  simplify a1 :$: simplify a2 :$: simplify a3
simplify (a1 :$: a2)           =  simplify a1 :$: simplify a2
simplify a                     =  a

Вот результат его работы:
*ExTesting> simplify $ (ExData 1 :$: ExData 2) :$: ExData 3
(ExData 1 :$: ExData 2) :$: ExData 3
*ExTesting> simplify $ ExData 1 :$: (ExData 2 :$: ExData 3)
(ExData 1 :$: ExData 2) :$: ExData 3

Тогда как надо было получить это:
*ExTesting> simplify $ (ExData 1 :$: ExData 2) :$: ExData 3
ExData 1 :$: ExData 2 :$: ExData 3
*ExTesting> simplify $ ExData 1 :$: (ExData 2 :$: ExData 3)
ExData 1 :$: ExData 2 :$: ExData 3

Как мне избавиться от этих лишних скобок в результате?
  • Вопрос задан
  • 163 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
includedlibrary
@includedlibrary
Можно вручную определить show для ExE.

instance Show ExE where
  show exe = case exe of
      ExData i -> "ExData " ++ show i
      e1 :$: e2 -> show e1 ++ " :$: " ++ show e2
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы