@@ -319,8 +319,20 @@ defmodule Module.Types.Of do
319319 # ensuring that domains for the same function have
320320 # no overlaps.
321321
322+ mfargs = [ atom ( ) , atom ( ) , list ( term ( ) ) ]
323+
324+ send_destination =
325+ pid ( )
326+ |> union ( reference ( ) )
327+ |> union ( port ( ) )
328+ |> union ( atom ( ) )
329+ |> union ( tuple ( [ atom ( ) , atom ( ) ] ) )
330+
322331 for { mod , fun , clauses } <- [
332+ # :binary
323333 { :binary , :copy , [ { [ binary ( ) , integer ( ) ] , binary ( ) } ] } ,
334+
335+ # :erlang
324336 { :erlang , :atom_to_binary , [ { [ atom ( ) ] , binary ( ) } ] } ,
325337 { :erlang , :atom_to_list , [ { [ atom ( ) ] , list ( integer ( ) ) } ] } ,
326338 { :erlang , :band , [ { [ integer ( ) , integer ( ) ] , integer ( ) } ] } ,
@@ -344,6 +356,13 @@ defmodule Module.Types.Of do
344356 { :erlang , :list_to_integer , [ { [ non_empty_list ( integer ( ) ) ] , integer ( ) } ] } ,
345357 { :erlang , :list_to_integer , [ { [ non_empty_list ( integer ( ) ) , integer ( ) ] , integer ( ) } ] } ,
346358 { :erlang , :list_to_tuple , [ { [ list ( term ( ) ) ] , dynamic ( open_tuple ( [ ] , term ( ) ) ) } ] } ,
359+ { :erlang , :self , [ { [ ] , pid ( ) } ] } ,
360+ { :erlang , :spawn , [ { [ fun ( ) ] , pid ( ) } ] } ,
361+ { :erlang , :spawn , [ { mfargs , pid ( ) } ] } ,
362+ { :erlang , :spawn_link , [ { [ fun ( ) ] , pid ( ) } ] } ,
363+ { :erlang , :spawn_link , [ { mfargs , pid ( ) } ] } ,
364+ { :erlang , :spawn_monitor , [ { [ fun ( ) ] , tuple ( [ reference ( ) , pid ( ) ] ) } ] } ,
365+ { :erlang , :spawn_monitor , [ { mfargs , tuple ( [ reference ( ) , pid ( ) ] ) } ] } ,
347366
348367 # TODO: Replace term()/dynamic() by parametric types
349368 { :erlang , :delete_element ,
@@ -352,6 +371,7 @@ defmodule Module.Types.Of do
352371 { :erlang , :element , [ { [ integer ( ) , open_tuple ( [ ] , term ( ) ) ] , dynamic ( ) } ] } ,
353372 { :erlang , :insert_element ,
354373 [ { [ integer ( ) , open_tuple ( [ ] , term ( ) ) , term ( ) ] , dynamic ( open_tuple ( [ ] , term ( ) ) ) } ] } ,
374+ { :erlang , :send , [ { [ send_destination , term ( ) ] , dynamic ( ) } ] } ,
355375 { :erlang , :setelement ,
356376 [ { [ integer ( ) , open_tuple ( [ ] , term ( ) ) , term ( ) ] , dynamic ( open_tuple ( [ ] , term ( ) ) ) } ] } ,
357377 { :erlang , :tl , [ { [ non_empty_list ( term ( ) , term ( ) ) ] , dynamic ( ) } ] } ,
0 commit comments