Advertisement
Guest User

Untitled

a guest
Oct 21st, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. Before:
  2. datatype Maybe<T> { None, Just(x:T) }
  3.  
  4. After:
  5. interface Maybe<T> extends ADT{
  6. match<U>(fs:MaybeFuns<T,U>) : U
  7. match_<U>(fs:MaybeFuns_<T,U>) : U
  8. }
  9. interface MaybeFuns<T,U> extends MatchFuns<U> {
  10. None: () => U
  11. Just: (x:T) => U
  12. }
  13. interface MaybeFuns_<T,U> extends MatchFuns_<U> {
  14. None?: () => U
  15. Just?: (x:T) => U
  16. }
  17. class None<T> extends Tuple0 implements Maybe<T> {
  18. match<U>(fs: MaybeFuns<T,U>) : U {
  19. return fs.None()
  20. }
  21. match_<U>(fs: MaybeFuns_<T,U>) : U {
  22. return fs.None ? fs.None() : fs._()
  23. }
  24. }
  25. class Just<T> extends Tuple1<T> implements Maybe<T> {
  26. constructor(x:T) {
  27. super(x)
  28. }
  29. match<U>(fs: MaybeFuns<T,U>) : U {
  30. return fs.Just(this[0])
  31. }
  32. match_<U>(fs: MaybeFuns_<T,U>) : U {
  33. return fs.Just ? fs.Just(this[0]) : fs._()
  34. }
  35. }
  36.  
  37.  
  38.  
  39. Before:
  40. datatype Tree<T> {Empty, Leaf(x:T), Nd(l:Tree<T>,r:Tree<T>)}
  41.  
  42. After:
  43. interface Tree<T> extends ADT {
  44. match<U>(fs: TreeFuns<T,U>) : U
  45. match_<U>(fs: TreeFuns_<T,U>) : U
  46. }
  47. interface TreeFuns<T,U> extends MatchFuns<U> {
  48. Empty: () => U
  49. Leaf: (x:T) => U
  50. Nd: (l:Tree<T>, r:Tree<T>) => U
  51. }
  52. interface TreeFuns_<T,U> extends MatchFuns_<U> {
  53. Empty?: () => U
  54. Leaf?: (x:T) => U
  55. Nd?: (l:Tree<T>, r:Tree<T>) => U
  56. }
  57. class Empty<T> extends Tuple0 implements Tree<T> {
  58. match<U>(fs: TreeFuns<T,U>) : U {
  59. return fs.Empty()
  60. }
  61. match_<U>(fs: TreeFuns_<T,U>) : U {
  62. return (fs.Empty) ? fs.Empty() : fs._()
  63. }
  64. }
  65. class Leaf<T> extends Tuple1<T> implements Tree<T> {
  66. constructor(x:T) {
  67. super(x);
  68. }
  69. match<U>(fs: TreeFuns<T,U>) : U {
  70. return fs.Leaf(this[0])
  71. }
  72. match_<U>(fs: TreeFuns_<T,U>) : U {
  73. return (fs.Leaf) ? fs.Leaf(this[0]) : fs._()
  74. }
  75. }
  76. class Nd<T> extends Tuple2<Tree<T>,Tree<T>> implements Tree<T> {
  77. constructor(l:Tree<T>, r:Tree<T>) {
  78. super(l, r)
  79. }
  80. match<U>(fs: TreeFuns<T,U>) : U {
  81. return fs.Nd(this[0], this[1])
  82. }
  83. match_<U>(fs: TreeFuns_<T,U>) : U {
  84. return (fs.Nd) ? fs.Nd(this[0], this[1]) : fs._()
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement