Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0370-dialyzer-Clarify-how-to-declare-records-us...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0370-dialyzer-Clarify-how-to-declare-records-used-in-matc.patch of Package erlang
From 6be75e50394317607af7a5501ef4e6acfef86a35 Mon Sep 17 00:00:00 2001 From: Hans Bolinder <hasse@erlang.org> Date: Tue, 9 Feb 2021 14:55:26 +0100 Subject: [PATCH] dialyzer: Clarify how to declare records used in match patterns See also https://bugs.erlang.org/browse/ERL-892. --- system/doc/reference_manual/typespec.xml | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/system/doc/reference_manual/typespec.xml b/system/doc/reference_manual/typespec.xml index b46cf0e8e8..c800301edc 100644 --- a/system/doc/reference_manual/typespec.xml +++ b/system/doc/reference_manual/typespec.xml @@ -467,6 +467,33 @@ Any unspecified fields are assumed to have the type in the original record declaration. </p> + <note> + <p>When records are used to create patterns for ETS and + Mnesia match functions, Dialyzer may need some help not to emit + bad warnings. For example:</p> + +<pre> + -type height() :: pos_integer(). + -record(person, {name :: string(), height :: height()}). + + lookup(Name, Tab) -> + ets:match_object(Tab, #person{name = Name, _ = '_'}).</pre> + + <p>Dialyzer will emit a warning since <c>'_'</c> is not in the + type of record field <c>height</c>.</p> + + <p>The recommended way of dealing with this is to declare the + smallest record field types to accommodate all your needs, + and then create refinements as needed. The modified example:</p> + +<pre> + -record(person, {name :: string(), height :: height() | '_'}). + + -type person() :: #person{height :: height()}.</pre> + + <p>In specifications and type declarations the type + <c>person()</c> is to be preferred before <c>#person{}</c>.</p> + </note> </section> <section> -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor