add ligo-helpers
moved helpers modified ligo-helpers opam
This commit is contained in:
parent
c449a76841
commit
ff48226748
6
src/lib_ligo/src/helpers/.gitignore
vendored
Normal file
6
src/lib_ligo/src/helpers/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
_build/*
|
||||
*/_build
|
||||
*~
|
||||
.merlin
|
||||
*/.merlin
|
||||
*.install
|
33
src/lib_ligo/src/helpers/dictionary.ml
Normal file
33
src/lib_ligo/src/helpers/dictionary.ml
Normal file
@ -0,0 +1,33 @@
|
||||
open Trace
|
||||
|
||||
type ('a, 'b) t = ('a * 'b) list
|
||||
|
||||
let get_exn x y = List.assoc y x
|
||||
|
||||
let get x y = generic_try (simple_error "Dictionry.get") @@ fun () -> get_exn x y
|
||||
|
||||
let set ?equal lst a b =
|
||||
let equal : 'a -> 'a -> bool =
|
||||
Option.unopt
|
||||
~default:(=) equal
|
||||
in
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _)::tl when equal key a -> aux ((key, b) :: acc) tl
|
||||
| hd::tl -> aux (hd :: acc) tl
|
||||
in
|
||||
aux [] lst
|
||||
|
||||
let del ?equal lst a =
|
||||
let equal : 'a -> 'a -> bool =
|
||||
Option.unopt
|
||||
~default:(=) equal
|
||||
in
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _)::tl when equal key a -> aux acc tl
|
||||
| hd::tl -> aux (hd :: acc) tl
|
||||
in
|
||||
aux [] lst
|
||||
|
||||
let to_list x = x
|
16
src/lib_ligo/src/helpers/dictionary.mli
Normal file
16
src/lib_ligo/src/helpers/dictionary.mli
Normal file
@ -0,0 +1,16 @@
|
||||
open Trace
|
||||
|
||||
type ('a, 'b) t
|
||||
|
||||
val get_exn : ('a, 'b) t -> 'a -> 'b
|
||||
val get : ('a, 'b) t -> 'a -> 'b result
|
||||
|
||||
val set :
|
||||
?equal:('a -> 'a -> bool) ->
|
||||
('a, 'b) t -> 'a -> 'b -> ('a, 'b) t
|
||||
|
||||
val del :
|
||||
?equal:('a -> 'a -> bool) ->
|
||||
('a, 'b) t -> 'a -> ('a, 'b) t
|
||||
|
||||
val to_list : ('a, 'b) t -> ('a * 'b) list
|
8
src/lib_ligo/src/helpers/dune
Normal file
8
src/lib_ligo/src/helpers/dune
Normal file
@ -0,0 +1,8 @@
|
||||
(library
|
||||
(libraries
|
||||
tezos-base
|
||||
tezos-utils
|
||||
)
|
||||
(name ligo_helpers)
|
||||
(public_name ligo-helpers)
|
||||
)
|
53
src/lib_ligo/src/helpers/environment.ml
Normal file
53
src/lib_ligo/src/helpers/environment.ml
Normal file
@ -0,0 +1,53 @@
|
||||
module type PARAMETER = sig
|
||||
type key
|
||||
type value
|
||||
val key_cmp : key -> key -> int
|
||||
val value_cmp : value -> value -> int
|
||||
end
|
||||
|
||||
let parameter (type key value) ?key_cmp ?value_cmp () : (module PARAMETER with type key = key and type value = value) =
|
||||
(module struct
|
||||
type nonrec key = key
|
||||
type nonrec value = value
|
||||
let key_cmp = Option.unopt ~default:compare key_cmp
|
||||
let value_cmp = Option.unopt ~default:compare value_cmp
|
||||
end)
|
||||
|
||||
let int_parameter = (parameter () : (module PARAMETER with type key = int and type value = int))
|
||||
module INT_PARAMETER = (val ((parameter () : (module PARAMETER with type key = int and type value = int))))
|
||||
|
||||
module type ENVIRONMENT = sig
|
||||
type key
|
||||
type value
|
||||
type t
|
||||
|
||||
val empty : t
|
||||
val get_opt : t -> key -> value option
|
||||
val gets : t -> key -> value list
|
||||
val set : t -> key -> value -> t
|
||||
val del : t -> key -> t
|
||||
end
|
||||
|
||||
module Make(P:PARAMETER) : ENVIRONMENT with type key = P.key and type value = P.value = struct
|
||||
type key = P.key
|
||||
type value = P.value
|
||||
type t = (key * value) list
|
||||
|
||||
let empty : t = []
|
||||
|
||||
let gets lst k =
|
||||
let kvs = List.filter (fun (k', _) -> P.key_cmp k k' = 0) lst in
|
||||
List.map snd kvs
|
||||
let get_opt lst k = match gets lst k with
|
||||
| [] -> None
|
||||
| v :: _ -> Some v
|
||||
|
||||
let set lst k v = (k, v) :: lst
|
||||
|
||||
let del lst k =
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _) :: tl when P.key_cmp key k = 0 -> List.rev acc @ tl
|
||||
| hd :: tl -> aux (hd :: acc) tl in
|
||||
aux [] lst
|
||||
end
|
23
src/lib_ligo/src/helpers/ligo-helpers.opam
Normal file
23
src/lib_ligo/src/helpers/ligo-helpers.opam
Normal file
@ -0,0 +1,23 @@
|
||||
name: "ligo-helpers"
|
||||
opam-version: "2.0"
|
||||
version: "1.0"
|
||||
maintainer: "gabriel.alfour@gmail.com"
|
||||
authors: [ "Galfour" ]
|
||||
homepage: "https://gitlab.com/gabriel.alfour/tezos"
|
||||
bug-reports: "https://gitlab.com/gabriel.alfour/tezos/issues"
|
||||
dev-repo: "git+https://gitlab.com/gabriel.alfour/tezos.git"
|
||||
license: "MIT"
|
||||
depends: [
|
||||
"ocamlfind" { build }
|
||||
"dune" { build & >= "1.0.1" }
|
||||
"meta-michelson"
|
||||
"tezos-utils"
|
||||
"tezos-base"
|
||||
]
|
||||
build: [
|
||||
[ "dune" "build" "-p" name "-j" jobs ]
|
||||
[ "mv" "src/lib_ligo/src/helpers/ligo-helpers.install" "." ]
|
||||
]
|
||||
url {
|
||||
src: "https://gitlab.com/gabriel.alfour/tezos/-/archive/master/tezos.tar.gz"
|
||||
}
|
24
src/lib_ligo/src/helpers/location.ml
Normal file
24
src/lib_ligo/src/helpers/location.ml
Normal file
@ -0,0 +1,24 @@
|
||||
type file_location = {
|
||||
filename : string ;
|
||||
start_line : int ;
|
||||
start_column : int ;
|
||||
end_line : int ;
|
||||
end_column : int ;
|
||||
}
|
||||
|
||||
type virtual_location = string
|
||||
|
||||
type t =
|
||||
| File of file_location
|
||||
| Virtual of virtual_location
|
||||
|
||||
let make (start_pos:Lexing.position) (end_pos:Lexing.position) : t =
|
||||
let filename = start_pos.pos_fname in
|
||||
let start_line = start_pos.pos_lnum in
|
||||
let end_line = end_pos.pos_lnum in
|
||||
let start_column = start_pos.pos_cnum - start_pos.pos_bol in
|
||||
let end_column = end_pos.pos_cnum - end_pos.pos_bol in
|
||||
File { filename ; start_line ; start_column ; end_line ; end_column }
|
||||
|
||||
let virtual_location s = Virtual s
|
||||
let dummy = virtual_location "dummy"
|
3
src/lib_ligo/src/helpers/option.ml
Normal file
3
src/lib_ligo/src/helpers/option.ml
Normal file
@ -0,0 +1,3 @@
|
||||
let unopt ~default = function
|
||||
| None -> default
|
||||
| Some x -> x
|
157
src/lib_ligo/src/helpers/trace.ml
Normal file
157
src/lib_ligo/src/helpers/trace.ml
Normal file
@ -0,0 +1,157 @@
|
||||
type error = {
|
||||
message : string ;
|
||||
title : string ;
|
||||
}
|
||||
|
||||
type 'a result =
|
||||
Ok of 'a
|
||||
| Errors of error list
|
||||
|
||||
let ok x = Ok x
|
||||
let fail err = Errors [err]
|
||||
|
||||
let simple_error str = {
|
||||
message = "" ;
|
||||
title = str ;
|
||||
}
|
||||
|
||||
let error title message = { title ; message }
|
||||
|
||||
let simple_fail str = fail @@ simple_error str
|
||||
|
||||
let map f = function
|
||||
| Ok x -> f x
|
||||
| Errors _ as e -> e
|
||||
|
||||
let apply f = function
|
||||
| Ok x -> Ok (f x)
|
||||
| Errors _ as e -> e
|
||||
|
||||
let (>>?) x f = map f x
|
||||
let (>>|?) = apply
|
||||
|
||||
module Let_syntax = struct
|
||||
let bind m ~f = m >>? f
|
||||
end
|
||||
|
||||
let trace err = function
|
||||
| Ok _ as o -> o
|
||||
| Errors errs -> Errors (err :: errs)
|
||||
|
||||
let trace_option error = function
|
||||
| None -> fail error
|
||||
| Some s -> ok s
|
||||
|
||||
let rec bind_list = function
|
||||
| [] -> ok []
|
||||
| hd :: tl -> (
|
||||
hd >>? fun hd ->
|
||||
bind_list tl >>? fun tl ->
|
||||
ok @@ hd :: tl
|
||||
)
|
||||
|
||||
let bind_or (a, b) =
|
||||
match a with
|
||||
| Ok x -> ok x
|
||||
| _ -> b
|
||||
|
||||
let bind_lr (type a b) ((a : a result), (b:b result)) : [`Left of a | `Right of b] result =
|
||||
match (a, b) with
|
||||
| Ok x, _ -> ok @@ `Left x
|
||||
| _, Ok x -> ok @@ `Right x
|
||||
| _, Errors b -> Errors b
|
||||
|
||||
let bind_and (a, b) =
|
||||
a >>? fun a ->
|
||||
b >>? fun b ->
|
||||
ok (a, b)
|
||||
|
||||
module AE = Tezos_utils.Memory_proto_alpha.Alpha_environment
|
||||
module TP = Tezos_base__TzPervasives
|
||||
|
||||
let of_tz_error (err:Tezos_utils.Error_monad.error) : error =
|
||||
let str = Tezos_utils.Error_monad.(to_string err) in
|
||||
error "alpha error" str
|
||||
|
||||
let of_alpha_tz_error err = of_tz_error (AE.Ecoproto_error err)
|
||||
|
||||
let trace_alpha_tzresult err : 'a AE.Error_monad.tzresult -> 'a result =
|
||||
function
|
||||
| Result.Ok x -> ok x
|
||||
| Error errs -> Errors (err :: List.map of_alpha_tz_error errs)
|
||||
|
||||
let trace_alpha_tzresult_lwt error (x:_ AE.Error_monad.tzresult Lwt.t) : _ result =
|
||||
trace_alpha_tzresult error @@ Lwt_main.run x
|
||||
|
||||
let trace_tzresult err =
|
||||
function
|
||||
| Result.Ok x -> ok x
|
||||
| Error errs -> Errors (err :: List.map of_tz_error errs)
|
||||
|
||||
let trace_tzresult_lwt err (x:_ TP.Error_monad.tzresult Lwt.t) : _ result =
|
||||
trace_tzresult err @@ Lwt_main.run x
|
||||
|
||||
let generic_try err f =
|
||||
try (
|
||||
ok @@ f ()
|
||||
) with _ -> fail err
|
||||
|
||||
let specific_try handler f =
|
||||
try (
|
||||
ok @@ f ()
|
||||
) with exn -> fail (handler exn)
|
||||
|
||||
let sequence f lst =
|
||||
let rec aux acc = function
|
||||
| hd :: tl -> (
|
||||
match f hd with
|
||||
| Ok x -> aux (x :: acc) tl
|
||||
| Errors _ as errs -> errs
|
||||
)
|
||||
| [] -> ok @@ List.rev acc in
|
||||
aux [] lst
|
||||
|
||||
let error_pp fmt error =
|
||||
if error.message = ""
|
||||
then Format.fprintf fmt "%s" error.title
|
||||
else Format.fprintf fmt "%s : %s" error.title error.message
|
||||
|
||||
let error_pp_short fmt error =
|
||||
Format.fprintf fmt "%s" error.title
|
||||
|
||||
let errors_pp =
|
||||
Format.pp_print_list
|
||||
~pp_sep:Format.pp_print_newline
|
||||
error_pp
|
||||
|
||||
let errors_pp_short =
|
||||
Format.pp_print_list
|
||||
~pp_sep:Format.pp_print_newline
|
||||
error_pp_short
|
||||
|
||||
let pp_to_string pp () x =
|
||||
Format.fprintf Format.str_formatter "%a" pp x ;
|
||||
Format.flush_str_formatter ()
|
||||
|
||||
let errors_to_string = pp_to_string errors_pp
|
||||
|
||||
module Assert = struct
|
||||
let assert_true ~msg = function
|
||||
| true -> ok ()
|
||||
| false -> simple_fail msg
|
||||
|
||||
let assert_equal_int ?msg a b =
|
||||
let msg = Option.unopt ~default:"not equal int" msg in
|
||||
assert_true ~msg (a = b)
|
||||
|
||||
let assert_list_size ~msg lst n =
|
||||
assert_true ~msg (List.length lst = n)
|
||||
|
||||
let assert_list_size_2 ~msg = function
|
||||
| [a;b] -> ok (a, b)
|
||||
| _ -> simple_fail msg
|
||||
|
||||
let assert_list_size_1 ~msg = function
|
||||
| [a] -> ok a
|
||||
| _ -> simple_fail msg
|
||||
end
|
21
src/lib_ligo/src/helpers/wrap.ml
Normal file
21
src/lib_ligo/src/helpers/wrap.ml
Normal file
@ -0,0 +1,21 @@
|
||||
module Make (P : sig type meta end) = struct
|
||||
type meta = P.meta
|
||||
type 'value t = {
|
||||
value : 'value ;
|
||||
meta : meta ;
|
||||
}
|
||||
|
||||
let make meta value = { value ; meta }
|
||||
let value t = t.value
|
||||
let meta t = t.meta
|
||||
|
||||
let apply : ('a -> 'b) -> 'a t -> 'b = fun f x -> f x.value
|
||||
end
|
||||
|
||||
module Location = struct
|
||||
include Make(struct type meta = Location.t end)
|
||||
|
||||
let make_f f : loc:_ -> _ -> _ t = fun ~loc x -> make loc (f x)
|
||||
let make ~loc x : _ t = make loc x
|
||||
let update_location ~loc t = {t with meta = loc}
|
||||
end
|
33
src/ligo/helpers/dictionary.ml
Normal file
33
src/ligo/helpers/dictionary.ml
Normal file
@ -0,0 +1,33 @@
|
||||
open Trace
|
||||
|
||||
type ('a, 'b) t = ('a * 'b) list
|
||||
|
||||
let get_exn x y = List.assoc y x
|
||||
|
||||
let get x y = generic_try (simple_error "Dictionry.get") @@ fun () -> get_exn x y
|
||||
|
||||
let set ?equal lst a b =
|
||||
let equal : 'a -> 'a -> bool =
|
||||
Option.unopt
|
||||
~default:(=) equal
|
||||
in
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _)::tl when equal key a -> aux ((key, b) :: acc) tl
|
||||
| hd::tl -> aux (hd :: acc) tl
|
||||
in
|
||||
aux [] lst
|
||||
|
||||
let del ?equal lst a =
|
||||
let equal : 'a -> 'a -> bool =
|
||||
Option.unopt
|
||||
~default:(=) equal
|
||||
in
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _)::tl when equal key a -> aux acc tl
|
||||
| hd::tl -> aux (hd :: acc) tl
|
||||
in
|
||||
aux [] lst
|
||||
|
||||
let to_list x = x
|
16
src/ligo/helpers/dictionary.mli
Normal file
16
src/ligo/helpers/dictionary.mli
Normal file
@ -0,0 +1,16 @@
|
||||
open Trace
|
||||
|
||||
type ('a, 'b) t
|
||||
|
||||
val get_exn : ('a, 'b) t -> 'a -> 'b
|
||||
val get : ('a, 'b) t -> 'a -> 'b result
|
||||
|
||||
val set :
|
||||
?equal:('a -> 'a -> bool) ->
|
||||
('a, 'b) t -> 'a -> 'b -> ('a, 'b) t
|
||||
|
||||
val del :
|
||||
?equal:('a -> 'a -> bool) ->
|
||||
('a, 'b) t -> 'a -> ('a, 'b) t
|
||||
|
||||
val to_list : ('a, 'b) t -> ('a * 'b) list
|
8
src/ligo/helpers/dune
Normal file
8
src/ligo/helpers/dune
Normal file
@ -0,0 +1,8 @@
|
||||
(library
|
||||
(libraries
|
||||
tezos-base
|
||||
tezos-utils
|
||||
)
|
||||
(name ligo_helpers)
|
||||
(public_name ligo-helpers)
|
||||
)
|
53
src/ligo/helpers/environment.ml
Normal file
53
src/ligo/helpers/environment.ml
Normal file
@ -0,0 +1,53 @@
|
||||
module type PARAMETER = sig
|
||||
type key
|
||||
type value
|
||||
val key_cmp : key -> key -> int
|
||||
val value_cmp : value -> value -> int
|
||||
end
|
||||
|
||||
let parameter (type key value) ?key_cmp ?value_cmp () : (module PARAMETER with type key = key and type value = value) =
|
||||
(module struct
|
||||
type nonrec key = key
|
||||
type nonrec value = value
|
||||
let key_cmp = Option.unopt ~default:compare key_cmp
|
||||
let value_cmp = Option.unopt ~default:compare value_cmp
|
||||
end)
|
||||
|
||||
let int_parameter = (parameter () : (module PARAMETER with type key = int and type value = int))
|
||||
module INT_PARAMETER = (val ((parameter () : (module PARAMETER with type key = int and type value = int))))
|
||||
|
||||
module type ENVIRONMENT = sig
|
||||
type key
|
||||
type value
|
||||
type t
|
||||
|
||||
val empty : t
|
||||
val get_opt : t -> key -> value option
|
||||
val gets : t -> key -> value list
|
||||
val set : t -> key -> value -> t
|
||||
val del : t -> key -> t
|
||||
end
|
||||
|
||||
module Make(P:PARAMETER) : ENVIRONMENT with type key = P.key and type value = P.value = struct
|
||||
type key = P.key
|
||||
type value = P.value
|
||||
type t = (key * value) list
|
||||
|
||||
let empty : t = []
|
||||
|
||||
let gets lst k =
|
||||
let kvs = List.filter (fun (k', _) -> P.key_cmp k k' = 0) lst in
|
||||
List.map snd kvs
|
||||
let get_opt lst k = match gets lst k with
|
||||
| [] -> None
|
||||
| v :: _ -> Some v
|
||||
|
||||
let set lst k v = (k, v) :: lst
|
||||
|
||||
let del lst k =
|
||||
let rec aux acc = function
|
||||
| [] -> List.rev acc
|
||||
| (key, _) :: tl when P.key_cmp key k = 0 -> List.rev acc @ tl
|
||||
| hd :: tl -> aux (hd :: acc) tl in
|
||||
aux [] lst
|
||||
end
|
22
src/ligo/helpers/ligo-helpers.opam
Normal file
22
src/ligo/helpers/ligo-helpers.opam
Normal file
@ -0,0 +1,22 @@
|
||||
name: "ligo-helpers"
|
||||
opam-version: "2.0"
|
||||
version: "1.0"
|
||||
maintainer: "gabriel.alfour@gmail.com"
|
||||
authors: [ "Galfour" ]
|
||||
homepage: "https://gitlab.com/gabriel.alfour/tezos"
|
||||
bug-reports: "https://gitlab.com/gabriel.alfour/tezos/issues"
|
||||
dev-repo: "git+https://gitlab.com/gabriel.alfour/tezos.git"
|
||||
license: "MIT"
|
||||
depends: [
|
||||
"ocamlfind" { build }
|
||||
"dune" { build & >= "1.0.1" }
|
||||
"meta-michelson"
|
||||
"tezos-utils"
|
||||
"tezos-base"
|
||||
]
|
||||
build: [
|
||||
[ "dune" "build" "-p" name "-j" jobs ]
|
||||
]
|
||||
url {
|
||||
src: "https://gitlab.com/gabriel.alfour/tezos/-/archive/master/tezos.tar.gz"
|
||||
}
|
24
src/ligo/helpers/location.ml
Normal file
24
src/ligo/helpers/location.ml
Normal file
@ -0,0 +1,24 @@
|
||||
type file_location = {
|
||||
filename : string ;
|
||||
start_line : int ;
|
||||
start_column : int ;
|
||||
end_line : int ;
|
||||
end_column : int ;
|
||||
}
|
||||
|
||||
type virtual_location = string
|
||||
|
||||
type t =
|
||||
| File of file_location
|
||||
| Virtual of virtual_location
|
||||
|
||||
let make (start_pos:Lexing.position) (end_pos:Lexing.position) : t =
|
||||
let filename = start_pos.pos_fname in
|
||||
let start_line = start_pos.pos_lnum in
|
||||
let end_line = end_pos.pos_lnum in
|
||||
let start_column = start_pos.pos_cnum - start_pos.pos_bol in
|
||||
let end_column = end_pos.pos_cnum - end_pos.pos_bol in
|
||||
File { filename ; start_line ; start_column ; end_line ; end_column }
|
||||
|
||||
let virtual_location s = Virtual s
|
||||
let dummy = virtual_location "dummy"
|
3
src/ligo/helpers/option.ml
Normal file
3
src/ligo/helpers/option.ml
Normal file
@ -0,0 +1,3 @@
|
||||
let unopt ~default = function
|
||||
| None -> default
|
||||
| Some x -> x
|
157
src/ligo/helpers/trace.ml
Normal file
157
src/ligo/helpers/trace.ml
Normal file
@ -0,0 +1,157 @@
|
||||
type error = {
|
||||
message : string ;
|
||||
title : string ;
|
||||
}
|
||||
|
||||
type 'a result =
|
||||
Ok of 'a
|
||||
| Errors of error list
|
||||
|
||||
let ok x = Ok x
|
||||
let fail err = Errors [err]
|
||||
|
||||
let simple_error str = {
|
||||
message = "" ;
|
||||
title = str ;
|
||||
}
|
||||
|
||||
let error title message = { title ; message }
|
||||
|
||||
let simple_fail str = fail @@ simple_error str
|
||||
|
||||
let map f = function
|
||||
| Ok x -> f x
|
||||
| Errors _ as e -> e
|
||||
|
||||
let apply f = function
|
||||
| Ok x -> Ok (f x)
|
||||
| Errors _ as e -> e
|
||||
|
||||
let (>>?) x f = map f x
|
||||
let (>>|?) = apply
|
||||
|
||||
module Let_syntax = struct
|
||||
let bind m ~f = m >>? f
|
||||
end
|
||||
|
||||
let trace err = function
|
||||
| Ok _ as o -> o
|
||||
| Errors errs -> Errors (err :: errs)
|
||||
|
||||
let trace_option error = function
|
||||
| None -> fail error
|
||||
| Some s -> ok s
|
||||
|
||||
let rec bind_list = function
|
||||
| [] -> ok []
|
||||
| hd :: tl -> (
|
||||
hd >>? fun hd ->
|
||||
bind_list tl >>? fun tl ->
|
||||
ok @@ hd :: tl
|
||||
)
|
||||
|
||||
let bind_or (a, b) =
|
||||
match a with
|
||||
| Ok x -> ok x
|
||||
| _ -> b
|
||||
|
||||
let bind_lr (type a b) ((a : a result), (b:b result)) : [`Left of a | `Right of b] result =
|
||||
match (a, b) with
|
||||
| Ok x, _ -> ok @@ `Left x
|
||||
| _, Ok x -> ok @@ `Right x
|
||||
| _, Errors b -> Errors b
|
||||
|
||||
let bind_and (a, b) =
|
||||
a >>? fun a ->
|
||||
b >>? fun b ->
|
||||
ok (a, b)
|
||||
|
||||
module AE = Tezos_utils.Memory_proto_alpha.Alpha_environment
|
||||
module TP = Tezos_base__TzPervasives
|
||||
|
||||
let of_tz_error (err:Tezos_utils.Error_monad.error) : error =
|
||||
let str = Tezos_utils.Error_monad.(to_string err) in
|
||||
error "alpha error" str
|
||||
|
||||
let of_alpha_tz_error err = of_tz_error (AE.Ecoproto_error err)
|
||||
|
||||
let trace_alpha_tzresult err : 'a AE.Error_monad.tzresult -> 'a result =
|
||||
function
|
||||
| Result.Ok x -> ok x
|
||||
| Error errs -> Errors (err :: List.map of_alpha_tz_error errs)
|
||||
|
||||
let trace_alpha_tzresult_lwt error (x:_ AE.Error_monad.tzresult Lwt.t) : _ result =
|
||||
trace_alpha_tzresult error @@ Lwt_main.run x
|
||||
|
||||
let trace_tzresult err =
|
||||
function
|
||||
| Result.Ok x -> ok x
|
||||
| Error errs -> Errors (err :: List.map of_tz_error errs)
|
||||
|
||||
let trace_tzresult_lwt err (x:_ TP.Error_monad.tzresult Lwt.t) : _ result =
|
||||
trace_tzresult err @@ Lwt_main.run x
|
||||
|
||||
let generic_try err f =
|
||||
try (
|
||||
ok @@ f ()
|
||||
) with _ -> fail err
|
||||
|
||||
let specific_try handler f =
|
||||
try (
|
||||
ok @@ f ()
|
||||
) with exn -> fail (handler exn)
|
||||
|
||||
let sequence f lst =
|
||||
let rec aux acc = function
|
||||
| hd :: tl -> (
|
||||
match f hd with
|
||||
| Ok x -> aux (x :: acc) tl
|
||||
| Errors _ as errs -> errs
|
||||
)
|
||||
| [] -> ok @@ List.rev acc in
|
||||
aux [] lst
|
||||
|
||||
let error_pp fmt error =
|
||||
if error.message = ""
|
||||
then Format.fprintf fmt "%s" error.title
|
||||
else Format.fprintf fmt "%s : %s" error.title error.message
|
||||
|
||||
let error_pp_short fmt error =
|
||||
Format.fprintf fmt "%s" error.title
|
||||
|
||||
let errors_pp =
|
||||
Format.pp_print_list
|
||||
~pp_sep:Format.pp_print_newline
|
||||
error_pp
|
||||
|
||||
let errors_pp_short =
|
||||
Format.pp_print_list
|
||||
~pp_sep:Format.pp_print_newline
|
||||
error_pp_short
|
||||
|
||||
let pp_to_string pp () x =
|
||||
Format.fprintf Format.str_formatter "%a" pp x ;
|
||||
Format.flush_str_formatter ()
|
||||
|
||||
let errors_to_string = pp_to_string errors_pp
|
||||
|
||||
module Assert = struct
|
||||
let assert_true ~msg = function
|
||||
| true -> ok ()
|
||||
| false -> simple_fail msg
|
||||
|
||||
let assert_equal_int ?msg a b =
|
||||
let msg = Option.unopt ~default:"not equal int" msg in
|
||||
assert_true ~msg (a = b)
|
||||
|
||||
let assert_list_size ~msg lst n =
|
||||
assert_true ~msg (List.length lst = n)
|
||||
|
||||
let assert_list_size_2 ~msg = function
|
||||
| [a;b] -> ok (a, b)
|
||||
| _ -> simple_fail msg
|
||||
|
||||
let assert_list_size_1 ~msg = function
|
||||
| [a] -> ok a
|
||||
| _ -> simple_fail msg
|
||||
end
|
21
src/ligo/helpers/wrap.ml
Normal file
21
src/ligo/helpers/wrap.ml
Normal file
@ -0,0 +1,21 @@
|
||||
module Make (P : sig type meta end) = struct
|
||||
type meta = P.meta
|
||||
type 'value t = {
|
||||
value : 'value ;
|
||||
meta : meta ;
|
||||
}
|
||||
|
||||
let make meta value = { value ; meta }
|
||||
let value t = t.value
|
||||
let meta t = t.meta
|
||||
|
||||
let apply : ('a -> 'b) -> 'a t -> 'b = fun f x -> f x.value
|
||||
end
|
||||
|
||||
module Location = struct
|
||||
include Make(struct type meta = Location.t end)
|
||||
|
||||
let make_f f : loc:_ -> _ -> _ t = fun ~loc x -> make loc (f x)
|
||||
let make ~loc x : _ t = make loc x
|
||||
let update_location ~loc t = {t with meta = loc}
|
||||
end
|
Loading…
Reference in New Issue
Block a user