Answersexist для как к довольно-печати в Haskell, в том числе, как это сделать с packages, но это скорее вопрос о том, почему мой первый подход потерпел неудачу.Довольно-печать 2D список в Haskell (Объяснение Failure)
Учитывая 2D список вида w = [r,r1,r2]
, где W, R являются соответствующих типов данных w::W
, r::R
(простые вары для примера, а не мое фактическое соглашение об именовании):
data X = Y | Z
deriving (Eq, Show)
data R = [X]
deriving (Eq, Show)
data W = [R]
deriving (Eq, Show)
Почему бы не работает один из следующих подходов? (Я полностью осознаю это будет включать в скобки и запятые, что это не проблема)
ppR :: R -> IO()
ppR = putStrLn . show
и либо
ppW :: W -> IO W (?)
ppW (w:[]) = ppR w
ppW (w:ws) = ppR w >> ppW ws
или
ppW :: W -> IO W (?)
ppW (w:[]) = putStrLn . show w
ppW (w:ws) = putStrLn . show w >> ppW ws
Я не совсем знаю, типы ppW
, я все еще учусь. В дополнение к моему явному наивному (недостатку) пониманию того, как Haskell справляется с нечистыми функциями, меня также сбивает с толку тот факт, что второй подход к ppW typechecks (без заданного типа).
Почему этот подход не работает? Не можете ли вы рекурсивно распечатать двумерный список неопределенной длины в Haskell?
Я думаю, что это заслуживает объяснения, почему вместо 'data' используется' type'. ('R' и' W' не имеют конструкторов) – Cirdec
Это облегчение, чтобы знать, что я на самом деле не был слишком далеко. Я отмечу это как принято, как только смогу пойти домой и попробовать это сам. – Andy