[
  [
    "start",
    [
      "punctuation.definition.comment.haskell",
      "-- Type annotation (optional)"
    ]
  ],
  [
    "start",
    [
      "entity.name.function.haskell",
      "fib"
    ],
    [
      "meta.function.type-declaration.haskell",
      " "
    ],
    [
      "keyword.other.double-colon.haskell",
      "::"
    ],
    [
      "meta.function.type-declaration.haskell",
      " "
    ],
    [
      "support.type.prelude.haskell",
      "Int"
    ],
    [
      "meta.function.type-declaration.haskell",
      " "
    ],
    [
      "keyword.other.arrow.haskell",
      "->"
    ],
    [
      "meta.function.type-declaration.haskell",
      " "
    ],
    [
      "support.type.prelude.haskell",
      "Integer"
    ]
  ],
  [
    "start",
    [
      "text",
      " "
    ]
  ],
  [
    "start",
    [
      "punctuation.definition.comment.haskell",
      "-- With self-referencing data"
    ]
  ],
  [
    "start",
    [
      "text",
      "fib n "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "!!"
    ],
    [
      "text",
      " n"
    ]
  ],
  [
    "start",
    [
      "text",
      "        "
    ],
    [
      "keyword.other.haskell",
      "where"
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "0"
    ],
    [
      "text",
      " "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " "
    ],
    [
      "support.function.prelude.haskell",
      "scanl"
    ],
    [
      "text",
      " "
    ],
    [
      "entity.name.function.infix.haskell",
      "(+)"
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "1"
    ],
    [
      "text",
      " fibs"
    ]
  ],
  [
    "start",
    [
      "text",
      "        "
    ],
    [
      "punctuation.definition.comment.haskell",
      "-- 0,1,1,2,3,5,..."
    ]
  ],
  [
    "start",
    [
      "text",
      " "
    ]
  ],
  [
    "start",
    [
      "punctuation.definition.comment.haskell",
      "-- Same, coded directly"
    ]
  ],
  [
    "start",
    [
      "text",
      "fib n "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "!!"
    ],
    [
      "text",
      " n"
    ]
  ],
  [
    "start",
    [
      "text",
      "        "
    ],
    [
      "keyword.other.haskell",
      "where"
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "0"
    ],
    [
      "text",
      " "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "1"
    ],
    [
      "text",
      " "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " next fibs"
    ]
  ],
  [
    "start",
    [
      "text",
      "              next (a "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " t@(b"
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      "_)) "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " (a"
    ],
    [
      "keyword.operator.haskell",
      "+"
    ],
    [
      "text",
      "b) "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " next t"
    ]
  ],
  [
    "start",
    [
      "text",
      " "
    ]
  ],
  [
    "start",
    [
      "punctuation.definition.comment.haskell",
      "-- Similar idea, using zipWith"
    ]
  ],
  [
    "start",
    [
      "text",
      "fib n "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "!!"
    ],
    [
      "text",
      " n"
    ]
  ],
  [
    "start",
    [
      "text",
      "        "
    ],
    [
      "keyword.other.haskell",
      "where"
    ],
    [
      "text",
      " fibs "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "0"
    ],
    [
      "text",
      " "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " "
    ],
    [
      "constant.numeric.haskell",
      "1"
    ],
    [
      "text",
      " "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " "
    ],
    [
      "support.function.prelude.haskell",
      "zipWith"
    ],
    [
      "text",
      " "
    ],
    [
      "entity.name.function.infix.haskell",
      "(+)"
    ],
    [
      "text",
      " fibs ("
    ],
    [
      "support.function.prelude.haskell",
      "tail"
    ],
    [
      "text",
      " fibs)"
    ]
  ],
  [
    "start",
    [
      "text",
      " "
    ]
  ],
  [
    "start",
    [
      "punctuation.definition.comment.haskell",
      "-- Using a generator function"
    ]
  ],
  [
    "start",
    [
      "text",
      "fib n "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " fibs ("
    ],
    [
      "constant.numeric.haskell",
      "0"
    ],
    [
      "punctuation.separator.comma.haskell",
      ","
    ],
    [
      "constant.numeric.haskell",
      "1"
    ],
    [
      "text",
      ") "
    ],
    [
      "keyword.operator.haskell",
      "!!"
    ],
    [
      "text",
      " n"
    ]
  ],
  [
    "start",
    [
      "text",
      "        "
    ],
    [
      "keyword.other.haskell",
      "where"
    ],
    [
      "text",
      " fibs (a"
    ],
    [
      "punctuation.separator.comma.haskell",
      ","
    ],
    [
      "text",
      "b) "
    ],
    [
      "keyword.operator.haskell",
      "="
    ],
    [
      "text",
      " a "
    ],
    [
      "keyword.operator.haskell",
      ":"
    ],
    [
      "text",
      " fibs (b"
    ],
    [
      "punctuation.separator.comma.haskell",
      ","
    ],
    [
      "text",
      "a"
    ],
    [
      "keyword.operator.haskell",
      "+"
    ],
    [
      "text",
      "b)"
    ]
  ]
]