Вы можете использовать trace :: String -> a -> a
из Debug.Trace
или связанные с ними функции, такие как traceShowId :: Show a => a -> a
.Эта функция в основном печатает прикрепленный параметр String
в случае оценки функции и возвращает результат функции.
Таким образом, мы можем - для некоторого контента, который может быть напечатан - присоединитьтакие trace
функции, и, следовательно, печатать информацию.Обратите внимание, что отладка в Haskell обычно отличается от отладки в императивных языках, главным образом из-за лени: обычно функции не оцениваются, если только нам не нужен результат.Таким образом, это означает, что некоторые функции никогда не будут оценены, или они будут оценены в течение долгого времени после того, как мы сконструировали эту функцию.
Об этой функции я бы посоветовал использовать сопоставление с образцом здесь и удалитьшум неиспользуемых переменных:
iffthen :: [String] -> Parser String
iffthen <b>(ifs : cond : thens : val1 : elses : val2 : _)</b> = do
symbol <b>ifs</b>
booleana <b>cond</b>
symbol <b>thens</b>
k <- assignP <b>val1</b>
symbol <b>elses</b>
assignP <b>val2</b>
return k
(Учитывая, что я правильно интерпретировал, что вы хотите, и ifs
, thens
, elses
- символы, cond
- условие, а val1
иval2
- это значения выражения if
- then
- else
).
Вероятно, даже лучше не использовать список (поскольку число элементов равно , а не *)1037 * гарантируется во время компиляции), и, таким образом, создается отдельный тип с конкретными параметрами.