This repository has been archived by the owner on May 15, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
/
shape_mod1.erlt
84 lines (68 loc) · 2.31 KB
/
shape_mod1.erlt
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
%% Copyright (c) Facebook, Inc. and its affiliates.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
-module(shape_mod1).
-export([test/0, test/1, test2/1, test_in_lc/1]).
-spec test() -> integer().
[unchecked]
test() ->
size({#(),
test3(#(a=1, b=2)),
test4(#(a=1, b=2)#()),
test5(#(a=1)#(b=2)#()),
#(a=1,b=2)#(a),
#(a=1)#(b=2)#(a),
#()#(a=1,b=#(c=2,d=3))#(b)#(e=4),
#(a = 1, b = 2) = mk_map(1,2),
#(a=2) = update_map1(#(a=1), 2),
#(a = 2, b = 1) = update_map3(mk_map(1,2)),
{'x', {25,36}} = access_map(#(id='x', location={25,36})),
'ok' = access_map2(#(inner1=#(inner2='ok')))}).
-spec test(#(a::integer(), b::#(c::integer()))) -> atom().
test(A) when A =:= #(a=1,b=#(c=2)) -> 'closed_ok';
test(#(a=1,b=#(c=2))) -> 'open_ok'.
-spec test2(#()) -> {}.
test2(#()) -> {}.
test3(A) when A#(b) =:= 2 -> {}.
test4(A) when A =:= #(a=1,b=1)#(b=2) -> {}.
test5(#(a=1)) -> {}.
-spec test_in_lc([#(id::A, _B)]) -> [A].
test_in_lc(List) ->
[Id || #(id = Id) <- List ].
-spec mk_map(A, B) -> #(a :: A, b :: B).
mk_map(A, B) ->
#(a = A, b = B).
-spec update_map1(#(a :: A), A) -> #(a :: A).
update_map1(M, A) ->
M#(a = A).
%% Generic updates are dis-allowed?
%%-spec update_map2(#(a :: A | _), A) -> #(a :: A | _).
%%update_map2(M, A) ->
%% M#(a = A).
-spec update_map3(#(a :: A, b :: A)) -> #(a :: A, b :: A).
update_map3(M) ->
A0 = M#(a),
B0 = M#(b),
M#(a = B0, b = A0).
%% Generic updates are forbidden?
%%-spec update_map4(#(a :: A, b :: A | _)) -> #(a :: A, b :: A | _).
%%update_map4(M) ->
%% A0 = M#(a),
%% B0 = M#(b),
%% M#(a = B0, b = A0).
-spec access_map(#(id :: Id, location :: Location, _)) -> {Id, Location}.
access_map(M) ->
{M#(id), M#(location)}.
-spec access_map2(#(inner1 :: #(inner2 :: A))) -> A.
access_map2(M) ->
M#(inner1)#(inner2).