Guest User

Untitled

a guest
Jul 20th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. module List where
  2.  
  3. data List a
  4. = Null
  5. | Node (List a) a
  6. deriving (Show, Eq)
  7.  
  8. build = build' Null
  9. where
  10. build' Null [] = Null
  11. build' list (x:xs) = Node (build' list xs) x
  12.  
  13. head Null = Nothing
  14. head (Node list x) = Just x
  15.  
  16. tail Null = Nothing
  17. tail (Node list x) = Just list
  18.  
  19. toe Null = Nothing
  20. toe (Node Null x) = Just x
  21. toe (Node list x) = toe list
  22.  
  23. display Null = "Null"
  24. display (Node Null x) = show x
  25. display (Node list x) = show x ++ " => " ++ display list
  26.  
  27. toList Null = []
  28. toList (Node list x) = x : toList list
  29.  
  30. append Null x = Node Null x
  31. append (Node list y) x = Node (append list x) y
  32.  
  33. reverse Null = Null
  34. reverse (Node list a) = (List.reverse list) `append` a
  35.  
  36. join sep Null = ""
  37. join sep (Node Null x) = x
  38. join sep (Node list x) = x ++ sep ++ join sep list
  39.  
  40. map f Null = Null
  41. map f (Node list x) = Node (List.map f list) (f x)
  42.  
  43. step = step' ""
  44. where
  45. step' sep Null = ""
  46. step' [] (Node list x) = [] ++ "> " ++ x ++ "\n" ++ step' ([] ++ "-") list
  47. step' sep (Node list x) = sep ++ "> " ++ x ++ "\n" ++ step' (sep ++ "-") list
  48.  
  49. main =
  50. do
  51. let xs = build [1 .. 9]
  52. let sx = List.reverse xs
  53. let aa = List.map show sx
  54. -- let bb = join " --> " aa
  55. let bb = step aa
  56. putStrLn bb
Add Comment
Please, Sign In to add comment