functor (Lstream : S) ->
  sig
    val eval_lsys :
      int ->
      ('a * string Calc.t list) Lilis.lsystem -> ('a * float array) Lstream.t
    type 'a lstream = ('a * float array) Lstream.t
    type 'a crules
    val compress_rules :
      Lilis.SymbEnv.t ->
      (string * string Calc.t list) Lilis.rule list -> int Lilis.Make.crules
    val compress_post_rules :
      Lilis.SymbEnv.t ->
      ('a * string Calc.t list) Lilis.rule list -> 'a Lilis.Make.crules
    val compress_lslist :
      Lilis.SymbEnv.t ->
      string Lilis.stream -> (int * float array) Lstream.stored
    val compress_lsys :
      ('a * string Calc.t list) Lilis.lsystem ->
      Lilis.SymbEnv.t * (int * float array) Lstream.stored *
      int Lilis.Make.crules * 'a Lilis.Make.crules
    val compress_lstream :
      Lilis.SymbEnv.t -> string Lilis.Make.lstream -> int Lilis.Make.lstream
    val uncompress_lstream :
      Lilis.SymbEnv.t -> int Lilis.Make.lstream -> string Lilis.Make.lstream
    val map_crules :
      ('a -> 'b) -> 'a Lilis.Make.crules -> 'b Lilis.Make.crules
    val apply :
      ?n:int ->
      int Lilis.Make.crules ->
      int Lilis.Make.lstream -> int Lilis.Make.lstream
    val apply_complete :
      'a Lilis.Make.crules -> int Lilis.Make.lstream -> 'a Lilis.Make.lstream
    val eval_lsys_uncompress :
      int ->
      ('a * string Calc.t list) Lilis.lsystem ->
      (string * float array) Lstream.t
    val iter_complete :
      ((float array -> float) array -> float array -> unit) Lilis.Make.crules ->
      int Lilis.Make.lstream -> unit
    val eval_iter_lsys :
      int ->
      ('a * string Calc.t list) Lilis.lsystem ->
      store:bool ->
      ('a -> (float array -> float) array -> float array -> unit) ->
      unit -> unit
    val eval_fold_lsys :
      int ->
      ('a * string Calc.t list) Lilis.lsystem ->
      store:bool ->
      ('a -> (float array -> float) array -> 'b -> float array -> 'b) ->
      'b -> 'b
  end