Initial import of Rope library
This commit is contained in:
parent
f08b0e155b
commit
f614c692d1
39
src/ligo/rope.ml
Normal file
39
src/ligo/rope.ml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module RopeImplementation = Rope_implementation
|
||||||
|
|
||||||
|
type impl = RopeImplementation.t
|
||||||
|
|
||||||
|
type 'a t =
|
||||||
|
S : string -> (((impl -> 'a) -> 'b) -> (impl -> 'a) -> 'b) t
|
||||||
|
| Other : 'a -> 'a t
|
||||||
|
|
||||||
|
let _S =
|
||||||
|
fun constant ->
|
||||||
|
fun f ->
|
||||||
|
fun new_cont ->
|
||||||
|
f (fun (acc : impl) -> new_cont RopeImplementation.(cat acc (of_string constant)))
|
||||||
|
|
||||||
|
let z = Other _S
|
||||||
|
let _d =
|
||||||
|
fun f ->
|
||||||
|
fun new_cont ->
|
||||||
|
f (fun (acc : impl) (i : int) -> new_cont RopeImplementation.(cat acc (of_string (string_of_int i))))
|
||||||
|
let d = Other _d
|
||||||
|
|
||||||
|
let _s =
|
||||||
|
fun f ->
|
||||||
|
fun new_cont ->
|
||||||
|
f (fun (acc : impl) (s : string) -> new_cont RopeImplementation.(cat acc (of_string s)))
|
||||||
|
let s = Other _s
|
||||||
|
|
||||||
|
let start cont = cont RopeImplementation.(of_string "")
|
||||||
|
let finish (acc : impl) = acc
|
||||||
|
|
||||||
|
let (~%) : type a b . (((impl -> a) -> a) -> b) t -> b =
|
||||||
|
function
|
||||||
|
| S str -> _S str start
|
||||||
|
| Other f -> f start
|
||||||
|
let (%) : type a b . a -> (a -> b) t -> b = fun fmt1 fmt2 -> match fmt2 with
|
||||||
|
| S str -> _S str fmt1
|
||||||
|
| Other f2 -> f2 fmt1
|
||||||
|
let (#%) fmt arg =
|
||||||
|
(fmt finish) arg
|
18
src/ligo/rope.mli
Normal file
18
src/ligo/rope.mli
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module RopeImplementation = Rope_implementation
|
||||||
|
type impl = RopeImplementation.t
|
||||||
|
type 'a t =
|
||||||
|
S : string -> (((impl -> 'a) -> 'b) -> (impl -> 'a) -> 'b) t
|
||||||
|
| Other : 'a -> 'a t
|
||||||
|
val _S : string -> ((impl -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b
|
||||||
|
val z :
|
||||||
|
(string -> ((impl -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b) t
|
||||||
|
val _d : ((impl -> int -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b
|
||||||
|
val d : (((impl -> int -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b) t
|
||||||
|
val _s : ((impl -> string -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b
|
||||||
|
val s :
|
||||||
|
(((impl -> string -> 'a) -> 'b) -> (RopeImplementation.t -> 'a) -> 'b) t
|
||||||
|
val start : (RopeImplementation.t -> 'a) -> 'a
|
||||||
|
val finish : impl -> impl
|
||||||
|
val ( ~% ) : (((impl -> 'a) -> 'a) -> 'b) t -> 'b
|
||||||
|
val ( % ) : 'a -> ('a -> 'b) t -> 'b
|
||||||
|
val ( #% ) : ((impl -> impl) -> 'a -> 'b) -> 'a -> 'b
|
4
src/ligo/rope_implementation.ml
Normal file
4
src/ligo/rope_implementation.ml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
type t = string
|
||||||
|
let of_string s = s
|
||||||
|
let cat a b = a ^ b
|
||||||
|
let to_string r = r
|
4
src/ligo/rope_implementation.mli
Normal file
4
src/ligo/rope_implementation.mli
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
type t
|
||||||
|
val of_string : string -> t
|
||||||
|
val cat : t -> t -> t
|
||||||
|
val to_string : t -> string
|
28
src/ligo/rope_test.ml
Normal file
28
src/ligo/rope_test.ml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
module A = struct
|
||||||
|
open Rope_top_level_open
|
||||||
|
open Rope
|
||||||
|
|
||||||
|
let x = d
|
||||||
|
let x = ~%d
|
||||||
|
let x = (~%d) #% 42
|
||||||
|
let x = (~%d%d)
|
||||||
|
let x = (~%d%d) #% 42 43
|
||||||
|
let x = (~%d%s) #% 42 "foo"
|
||||||
|
let x = (~%(S"foo")%s) #% ""
|
||||||
|
let x = (~%d%S"tralala"%d%s) #% 42 43 "foo"
|
||||||
|
end
|
||||||
|
|
||||||
|
module B = struct
|
||||||
|
open Rope_top_level_open
|
||||||
|
|
||||||
|
type foo = S | NotCaptured
|
||||||
|
let d = NotCaptured
|
||||||
|
let s = NotCaptured
|
||||||
|
|
||||||
|
let x = Rope.(~%d) #% 42
|
||||||
|
let x = Rope.(~%d%d)
|
||||||
|
let x = Rope.(~%d%d) #% 42 43
|
||||||
|
let x = Rope.(~%d%s) #% 42 "foo"
|
||||||
|
let x = Rope.(~%(S"foo")%s) #% ""
|
||||||
|
let x = Rope.(~%d%S"tralala"%d%s) #% 42 43 "foo"
|
||||||
|
end
|
3
src/ligo/rope_top_level_open.ml
Normal file
3
src/ligo/rope_top_level_open.ml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
open Rope
|
||||||
|
|
||||||
|
let (#%) = (#%)
|
3
src/ligo/rope_top_level_open.mli
Normal file
3
src/ligo/rope_top_level_open.mli
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
open Rope
|
||||||
|
|
||||||
|
val ( #% ) : ((impl -> impl) -> 'a -> 'b) -> 'a -> 'b
|
Loading…
Reference in New Issue
Block a user