package merlin-lib

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Ocaml_typing.ParmatchSource

Detection of partial matches and unused match cases.

const_compare c1 c2 compares the actual values represented by c1 and c2, while simply using Stdlib.compare would compare the representations.

cf. MPR#5758

le_pat p q means: forall V, V matches q implies V matches p

Sourceval le_pats : Typedtree.pattern list -> Typedtree.pattern list -> bool

le_pats (p1 .. pm) (q1 .. qn) means: forall i <= m, le_pat pi qi

Sourcemodule Compat (_ : sig ... end) : sig ... end

Exported compatibility functor, abstracted over constructor equality

Sourceexception Empty

lub p q is a pattern that matches all values matched by p and q. May raise Empty, when p and q are not compatible.

lubs [p1; ...; pn] [q1; ...; qk], where n < k, is [lub p1 q1; ...; lub pk qk].

Sourceval get_mins : ('a -> 'a -> bool) -> 'a list -> 'a list

Those two functions recombine one pattern and its arguments: For instance: (_,_)::p1::p2::rem -> (p1, p2)::rem The second one will replace mutable arguments by '_'

Sourceval set_args_erase_mutable : Typedtree.pattern -> Typedtree.pattern list -> Typedtree.pattern list
Sourcetype pat_explosion =
  1. | PE_single
  2. | PE_gadt_cases

ppat_of_type builds an untyped pattern from its expected type, for explosion of wildcard patterns in Typecore.type_pat.

There are four interesting cases:

  • the type is empty (PT_empty)
  • no further explosion is necessary (PT_any)
  • a single pattern is generated, from a record or tuple type or a single-variant type (PE_single)
  • an or-pattern is generated, in the case that all branches are GADT constructors (PE_gadt_cases).
Sourcetype ppat_of_type =
  1. | PT_empty
  2. | PT_any
  3. | PT_pattern of pat_explosion * Ocaml_parsing.Parsetree.pattern * (string, Types.constructor_description) Hashtbl.t * (string, Types.label_description) Hashtbl.t
Sourceval ppat_of_type : Env.t -> Types.type_expr -> ppat_of_type
Sourceval pressure_variants : Env.t -> Typedtree.pattern list -> unit
Sourceval pressure_variants_in_computation_pattern : Env.t -> Typedtree.computation Typedtree.general_pattern list -> unit

check_partial pred loc caselist and check_unused refute pred caselist are called with a function pred which will be given counter-example candidates: they may be partially ill-typed, and have to be type-checked to extract a valid counter-example. pred returns a valid counter-example or None. refute indicates that check_unused was called on a refutation clause.

Sourceval irrefutable : Typedtree.pattern -> bool
Sourceval inactive : partial:Typedtree.partial -> Typedtree.pattern -> bool

An inactive pattern is a pattern, matching against which can be duplicated, erased or delayed without change in observable behavior of the program. Patterns containing (lazy _) subpatterns or reads of mutable fields are active.

Sourceval check_ambiguous_bindings : Typedtree.value Typedtree.case list -> unit
Sourceval some_private_tag : Ocaml_parsing.Asttypes.label
Sourceval return_unused : Typedtree.pattern list -> [ `Unused of Typedtree.pattern | `Unused_subs of Typedtree.pattern * Typedtree.pattern list ] list
OCaml

Innovation. Community. Security.