package biocaml

  1. Overview
  2. Docs
The OCaml Bioinformatics Library

Install

Dune Dependency

Authors

Maintainers

Sources

biocaml-0.11.2.tbz
sha256=fae219e66db06f81f3fd7d9e44717ccf2d6d85701adb12004ab4ae6d3359dd2d
sha512=f6abd60dac2e02777be81ce3b5acdc0db23b3fa06731f5b2d0b32e6ecc9305fe64f407bbd95a3a9488b14d0a7ac7c41c73a7e18c329a8f18febfc8fd50eccbc6

doc/src/biocaml.base/lines.ml.html

Source file lines.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module Parser = struct

  type state =
    | Current_line of { n : int ; value : Line.t }
    | Finished of { n : int }
    (* [n] represents the number of completed lines *)

  let initial_state = Current_line {
      n = 0 ;
      value = Line.empty ;
    }

  let line_number = function
    | Current_line { n ; value } ->
      if (String.equal (value :> string) "") then n else n + 1
    | Finished { n } -> n

  let step st i = match st, i with
    | Finished _, _ -> st, []
    | Current_line { n ; value }, None ->
      Finished { n },
      if Line.is_empty value then [] else [ value ]
    | Current_line { n ; value }, Some input ->
      match Line.rightmost input with
      | None, line ->
        let value = Line.append value line in
        Current_line { n ; value }, []
      | Some left, right ->
        match Line.parse_string left with
        | [] -> assert false (* [Line.parse_string] never returns an empty list *)
        | h :: t ->
          Current_line {
            n = n + List.length t + 1 ;
            value = right
          },
          (Line.append value h) :: t
end
OCaml

Innovation. Community. Security.