-module(simple1_adt). -export([d1/0, d2/0, i/0, n1/0, n2/0, o1/0, o2/0, c1/0, c2/0, bit1/0, a/0, i1/0, tuple/0, b1/0, b2/0, ty_i1/0]). -export_type([o1/0, o2/0, d1/0, d2/0]). -export_type([i1/0, i2/0, di1/0, di2/0]). -export_type([ty_i1/0, c1/0, c2/0]). -export_type([b1/0, b2/0]). -export_type([bit1/0]). -export_type([tuple1/0, a/0, i/0]). %% Equal: -opaque o1() :: a | b | c. -opaque o2() :: a | b | c. %% Disjoint: -opaque d1() :: a | b | c. -opaque d2() :: d | e | f. %% One common element: -opaque c1() :: a | b | c. -opaque c2() :: c | e | f. %% Equal integer range: -opaque i1() :: 1 | 2. -opaque i2() :: 1 | 2. %% Disjoint integer range: -opaque di1() :: 1 | 2. -opaque di2() :: 3 | 4. -type ty_i1() :: 1 | 2. %% Boolean types -opaque b1() :: boolean(). -opaque b2() :: boolean(). %% Binary types -opaque bit1() :: binary(). %% Tuple types -opaque tuple1() :: tuple(). %% Atom type -opaque a() :: atom(). -opaque i() :: integer(). -spec d1() -> d1(). d1() -> a. -spec d2() -> d2(). d2() -> d. -spec i() -> i(). i() -> 1. -spec n1() -> o1(). n1() -> a. -spec n2() -> o2(). n2() -> a. -spec o1() -> o1(). o1() -> a. -spec o2() -> o2(). o2() -> a. -spec c1() -> c1(). c1() -> a. -spec c2() -> c2(). c2() -> e. -spec bit1() -> bit1(). bit1() -> <<"hej">>. -spec a() -> a(). a() -> e. -spec i1() -> i1(). i1() -> 1. -spec tuple() -> tuple1(). tuple() -> {1,2}. -spec b1() -> b1(). b1() -> true. -spec b2() -> b2(). b2() -> false. -spec ty_i1() -> ty_i1(). ty_i1() -> 1.