package goblint

  1. Overview
  2. Docs
Static analysis framework for C

Install

dune-project
 Dependency

Authors

Maintainers

Sources

goblint-2.8.0.tbz
sha256=9175eec0143102243964e34a0786584fd590c60422009259c705a89a27f88de4
sha512=9d760007dd8d003cf596516444ed7acc7370fc3d446e75ac71b0176522c3baae090410762f9035e7aae4f6b0e394bf28bb5b1c08ca0476920b94aa919ef04f42

doc/src/goblint.std/gobOption.ml.html

Source file gobOption.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
38
39
40
41
42
let concat_map f x = Option.bind x f

let exists p = function
  | Some x -> p x
  | None -> false

let for_all p = function
  | Some x -> p x
  | None -> true

let iter = Stdlib.Option.iter

let map2 binop opt1 opt2 =
  match opt1, opt2 with
  | Some x1, Some x2 -> Some (binop x1 x2)
  | _ -> None

let concat_map2 binop opt1 opt2 =
  match opt1, opt2 with
  | Some x1, Some x2 -> binop x1 x2
  | _ -> None

let exists2 p opt1 opt2 =
  match opt1, opt2 with
  | Some x1, Some x2 -> p x1 x2
  | _ -> false

(** Open this to use applicative functor/monad syntax for {!option}. *)
module Syntax =
struct
  (* Applicative functor. *)
  let (let+) x f = Option.map f x
  let (and+) x y = match x, y with
    | Some x, Some y -> Some (x, y)
    | _, _ -> None

  (* Monad *)
  let (let*) = Option.bind
  let (and*) = (and+)

  let (>>=) = Option.bind
end