-module(bat_erlang). -export([main/0]). -record(test, { name :: list(), data :: binary() }). -define(TESTMACRO, "testmacro"). -spec main() -> ok. main() -> %% Handling Lists and Numbers List = [1, 2, 3, 4, $6, 2#00111], _Sum = lists:sum(List), _ = [(N * N) + N / N - N || N <- List, N > 2], [_Head, _SecondHead | _Tail] = List, _ = [1, atom, [list], <<"binary">>, {tuple, tuple}, #{map => key}, #test{name = "record"}], %% Handling Binaries BinHelloWorld = <<"Hello World">>, <> <= BinHelloWorld >>, <<0,0,0,0,0,0,0,151>> = <<151:64/signed-integer>>, %% Handling Boolean and Atoms true = true andalso true, true = false orelse true, _ = true =:= true, _ = false =/= true, _ = 'HELLO' /= hello, _ = hello == world, %% Handling Maps and Records TestMap = #{a => 1, b => 2, c => 3}, #{a := _Value, c := _} = TestMap, _ = TestMap#{d => 4}, Record = #test{name = ?TESTMACRO}, _ = Record#test.name, %% Conditionals case TestMap of #{b := B} -> B; _ -> ok end, if erlang:is_map(TestMap) -> map; true -> test_function(1) end, %% Messaging Self = erlang:self(), Self ! hello_world, receive hello_world -> ok; _ -> io:format("unknown message") after 1000 -> timeout end, ok. test_function(N) when erlang:is_integer(N) -> integer; test_function([_|_]) -> list; test_function(<<_/binary>>) -> binary; test_function(_) -> undefined.