Erlang -- gen_fsm

STDLIB

Reference Manual

Version 3.11

- User's Guide
- Reference Manual
- Release Notes
- PDF
- Top

- Expand All
- Contract All

### Table of Contents

- STDLIB (App)
- array
  - Top of manual page
  - default/1
  - fix/1
  - foldl/3
  - foldr/3
  - from_list/1
  - from_list/2
  - from_orddict/1
  - from_orddict/2
  - get/2
  - is_array/1
  - is_fix/1
  - map/2
  - new/0
  - new/1
  - new/2
  - relax/1
  - reset/2
  - resize/1
  - resize/2
  - set/3
  - size/1
  - sparse_foldl/3
  - sparse_foldr/3
  - sparse_map/2
  - sparse_size/1
  - sparse_to_list/1
  - sparse_to_orddict/1
  - to_list/1
  - to_orddict/1
- assert.hrl
- base64
  - Top of manual page
  - decode/1
  - decode_to_string/1
  - encode/1
  - encode_to_string/1
  - mime_decode/1
  - mime_decode_to_string/1
- beam_lib
  - Top of manual page
  - all_chunks/1
  - build_module/1
  - chunks/2
  - chunks/3
  - clear_crypto_key_fun/0
  - cmp/2
  - cmp_dirs/2
  - crypto_key_fun/1
  - diff_dirs/2
  - format_error/1
  - info/1
  - md5/1
  - strip/1
  - strip/2
  - strip_files/1
  - strip_files/2
  - strip_release/1
  - strip_release/2
  - version/1
- binary
  - Top of manual page
  - at/2
  - bin_to_list/1
  - bin_to_list/2
  - bin_to_list/3
  - compile_pattern/1
  - copy/1
  - copy/2
  - decode_unsigned/1
  - decode_unsigned/2
  - encode_unsigned/1
  - encode_unsigned/2
  - first/1
  - last/1
  - list_to_bin/1
  - longest_common_prefix/1
  - longest_common_suffix/1
  - match/2
  - match/3
  - matches/2
  - matches/3
  - part/2
  - part/3
  - referenced_byte_size/1
  - replace/3
  - replace/4
  - split/2
  - split/3
- c
  - Top of manual page
  - bt/1
  - c/1
  - c/2
  - c/3
  - cd/1
  - erlangrc/1
  - flush/0
  - help/0
  - i/0
  - i/3
  - l/1
  - lc/1
  - lm/0
  - ls/0
  - ls/1
  - m/0
  - m/1
  - memory/0
  - memory/1
  - mm/0
  - nc/1
  - nc/2
  - ni/0
  - nl/1
  - nregs/0
  - pid/3
  - pwd/0
  - q/0
  - regs/0
  - uptime/0
  - xm/1
  - y/1
  - y/2
- calendar
  - Top of manual page
  - date_to_gregorian_days/1
  - date_to_gregorian_days/3
  - datetime_to_gregorian_seconds/1
  - day_of_the_week/1
  - day_of_the_week/3
  - gregorian_days_to_date/1
  - gregorian_seconds_to_datetime/1
  - is_leap_year/1
  - iso_week_number/0
  - iso_week_number/1
  - last_day_of_the_month/2
  - local_time/0
  - local_time_to_universal_time/1
  - local_time_to_universal_time_dst/1
  - now_to_datetime/1
  - now_to_local_time/1
  - now_to_universal_time/1
  - rfc3339_to_system_time/1
  - rfc3339_to_system_time/2
  - seconds_to_daystime/1
  - seconds_to_time/1
  - system_time_to_local_time/2
  - system_time_to_rfc3339/1
  - system_time_to_rfc3339/2
  - system_time_to_universal_time/2
  - time_difference/2
  - time_to_seconds/1
  - universal_time/0
  - universal_time_to_local_time/1
  - valid_date/1
  - valid_date/3
- dets
  - Top of manual page
  - all/0
  - bchunk/2
  - close/1
  - delete/2
  - delete_all_objects/1
  - delete_object/2
  - first/1
  - foldl/3
  - foldr/3
  - from_ets/2
  - info/1
  - info/2
  - init_table/2
  - init_table/3
  - insert/2
  - insert_new/2
  - is_compatible_bchunk_format/2
  - is_dets_file/1
  - lookup/2
  - match/1
  - match/2
  - match/3
  - match_delete/2
  - match_object/1
  - match_object/2
  - match_object/3
  - member/2
  - next/2
  - open_file/1
  - open_file/2
  - pid2name/1
  - repair_continuation/2
  - safe_fixtable/2
  - select/1
  - select/2
  - select/3
  - select_delete/2
  - slot/2
  - sync/1
  - table/1
  - table/2
  - to_ets/2
  - traverse/2
  - update_counter/3
- dict
  - Top of manual page
  - append/3
  - append_list/3
  - erase/2
  - fetch/2
  - fetch_keys/1
  - filter/2
  - find/2
  - fold/3
  - from_list/1
  - is_empty/1
  - is_key/2
  - map/2
  - merge/3
  - new/0
  - size/1
  - store/3
  - take/2
  - to_list/1
  - update/3
  - update/4
  - update_counter/3
- digraph
  - Top of manual page
  - add_edge/3
  - add_edge/4
  - add_edge/5
  - add_vertex/1
  - add_vertex/2
  - add_vertex/3
  - del_edge/2
  - del_edges/2
  - del_path/3
  - del_vertex/2
  - del_vertices/2
  - delete/1
  - edge/2
  - edges/1
  - edges/2
  - get_cycle/2
  - get_path/3
  - get_short_cycle/2
  - get_short_path/3
  - in_degree/2
  - in_edges/2
  - in_neighbours/2
  - info/1
  - new/0
  - new/1
  - no_edges/1
  - no_vertices/1
  - out_degree/2
  - out_edges/2
  - out_neighbours/2
  - vertex/2
  - vertices/1
- digraph_utils
  - Top of manual page
  - arborescence_root/1
  - components/1
  - condensation/1
  - cyclic_strong_components/1
  - is_acyclic/1
  - is_arborescence/1
  - is_tree/1
  - loop_vertices/1
  - postorder/1
  - preorder/1
  - reachable/2
  - reachable_neighbours/2
  - reaching/2
  - reaching_neighbours/2
  - strong_components/1
  - subgraph/2
  - subgraph/3
  - topsort/1
- epp
  - Top of manual page
  - close/1
  - default_encoding/0
  - encoding_to_string/1
  - format_error/1
  - open/1
  - open/2
  - open/3
  - parse_erl_form/1
  - parse_file/2
  - parse_file/3
  - read_encoding/1
  - read_encoding/2
  - read_encoding_from_binary/1
  - read_encoding_from_binary/2
  - set_encoding/1
  - set_encoding/2
- erl_anno
  - Top of manual page
  - column/1
  - end_location/1
  - file/1
  - from_term/1
  - generated/1
  - is_anno/1
  - line/1
  - location/1
  - new/1
  - set_file/2
  - set_generated/2
  - set_line/2
  - set_location/2
  - set_record/2
  - set_text/2
  - text/1
  - to_term/1
- erl_eval
  - Top of manual page
  - add_binding/3
  - binding/2
  - bindings/1
  - del_binding/2
  - expr/2
  - expr/3
  - expr/4
  - expr/5
  - expr_list/2
  - expr_list/3
  - expr_list/4
  - exprs/2
  - exprs/3
  - exprs/4
  - new_bindings/0
- erl_expand_records
  - Top of manual page
  - module/2
- erl_id_trans
  - Top of manual page
  - parse_transform/2
- erl_internal
  - Top of manual page
  - add_predefined_functions/1
  - arith_op/2
  - bif/2
  - bool_op/2
  - comp_op/2
  - guard_bif/2
  - list_op/2
  - op_type/2
  - send_op/2
  - type_test/2
- erl_lint
  - Top of manual page
  - format_error/1
  - is_guard_test/1
  - module/1
  - module/2
  - module/3
- erl_parse
  - Top of manual page
  - abstract/1
  - abstract/2
  - anno_from_term/1
  - anno_to_term/1
  - fold_anno/3
  - format_error/1
  - map_anno/2
  - mapfold_anno/3
  - new_anno/1
  - normalise/1
  - parse_exprs/1
  - parse_form/1
  - parse_term/1
  - tokens/1
  - tokens/2
- erl_pp
  - Top of manual page
  - attribute/1
  - attribute/2
  - expr/1
  - expr/2
  - expr/3
  - expr/4
  - exprs/1
  - exprs/2
  - exprs/3
  - form/1
  - form/2
  - function/1
  - function/2
  - guard/1
  - guard/2
- erl_scan
  - Top of manual page
  - category/1
  - column/1
  - end_location/1
  - format_error/1
  - line/1
  - location/1
  - reserved_word/1
  - string/1
  - string/2
  - string/3
  - symbol/1
  - text/1
  - tokens/3
  - tokens/4
- erl_tar
  - Top of manual page
  - add/3
  - add/4
  - close/1
  - create/2
  - create/3
  - extract/1
  - extract/2
  - format_error/1
  - init/3
  - open/2
  - t/1
  - table/1
  - table/2
  - tt/1
- ets
  - Top of manual page
  - all/0
  - delete/1
  - delete/2
  - delete_all_objects/1
  - delete_object/2
  - file2tab/1
  - file2tab/2
  - first/1
  - foldl/3
  - foldr/3
  - from_dets/2
  - fun2ms/1
  - give_away/3
  - i/0
  - i/1
  - info/1
  - info/2
  - init_table/2
  - insert/2
  - insert_new/2
  - is_compiled_ms/1
  - last/1
  - lookup/2
  - lookup_element/3
  - match/1
  - match/2
  - match/3
  - match_delete/2
  - match_object/1
  - match_object/2
  - match_object/3
  - match_spec_compile/1
  - match_spec_run/2
  - member/2
  - new/2
  - next/2
  - prev/2
  - rename/2
  - repair_continuation/2
  - safe_fixtable/2
  - select/1
  - select/2
  - select/3
  - select_count/2
  - select_delete/2
  - select_replace/2
  - select_reverse/1
  - select_reverse/2
  - select_reverse/3
  - setopts/2
  - slot/2
  - tab2file/2
  - tab2file/3
  - tab2list/1
  - tabfile_info/1
  - table/1
  - table/2
  - take/2
  - test_ms/2
  - to_dets/2
  - update_counter/3
  - update_counter/4
  - update_element/3
  - whereis/1
- file_sorter
  - Top of manual page
  - check/1
  - check/2
  - keycheck/2
  - keycheck/3
  - keymerge/3
  - keymerge/4
  - keysort/2
  - keysort/3
  - keysort/4
  - merge/2
  - merge/3
  - sort/1
  - sort/2
  - sort/3
- filelib
  - Top of manual page
  - ensure_dir/1
  - file_size/1
  - find_file/2
  - find_file/3
  - find_source/1
  - find_source/2
  - find_source/3
  - fold_files/5
  - is_dir/1
  - is_file/1
  - is_regular/1
  - last_modified/1
  - wildcard/1
  - wildcard/2
- filename
  - Top of manual page
  - absname/1
  - absname/2
  - absname_join/2
  - basedir/2
  - basedir/3
  - basename/1
  - basename/2
  - dirname/1
  - extension/1
  - find_src/1
  - find_src/2
  - flatten/1
  - join/1
  - join/2
  - nativename/1
  - pathtype/1
  - rootname/1
  - rootname/2
  - safe_relative_path/1
  - split/1
- gb_sets
  - Top of manual page
  - add/2
  - add_element/2
  - balance/1
  - del_element/2
  - delete/2
  - delete_any/2
  - difference/2
  - empty/0
  - filter/2
  - fold/3
  - from_list/1
  - from_ordset/1
  - insert/2
  - intersection/1
  - intersection/2
  - is_disjoint/2
  - is_element/2
  - is_empty/1
  - is_member/2
  - is_set/1
  - is_subset/2
  - iterator/1
  - iterator_from/2
  - largest/1
  - new/0
  - next/1
  - singleton/1
  - size/1
  - smallest/1
  - subtract/2
  - take_largest/1
  - take_smallest/1
  - to_list/1
  - union/1
  - union/2
- gb_trees
  - Top of manual page
  - balance/1
  - delete/2
  - delete_any/2
  - empty/0
  - enter/3
  - from_orddict/1
  - get/2
  - insert/3
  - is_defined/2
  - is_empty/1
  - iterator/1
  - iterator_from/2
  - keys/1
  - largest/1
  - lookup/2
  - map/2
  - next/1
  - size/1
  - smallest/1
  - take/2
  - take_any/2
  - take_largest/1
  - take_smallest/1
  - to_list/1
  - update/3
  - values/1
- gen_event
  - Top of manual page
  - add_handler/3
  - add_sup_handler/3
  - call/3
  - call/4
  - delete_handler/3
  - notify/2
  - start/0
  - start/1
  - start/2
  - start_link/0
  - start_link/1
  - start_link/2
  - stop/1
  - stop/3
  - swap_handler/3
  - swap_sup_handler/3
  - sync_notify/2
  - which_handlers/1
  - Module:code_change/3
  - Module:format_status/2
  - Module:handle_call/2
  - Module:handle_event/2
  - Module:handle_info/2
  - Module:init/1
  - Module:terminate/2
- gen_fsm
- gen_server
  - Top of manual page
  - abcast/2
  - abcast/3
  - call/2
  - call/3
  - cast/2
  - enter_loop/3
  - enter_loop/4
  - enter_loop/4
  - enter_loop/5
  - multi_call/2
  - multi_call/3
  - multi_call/4
  - reply/2
  - start/3
  - start/4
  - start_link/3
  - start_link/4
  - stop/1
  - stop/3
  - Module:code_change/3
  - Module:format_status/2
  - Module:handle_call/3
  - Module:handle_cast/2
  - Module:handle_continue/2
  - Module:handle_info/2
  - Module:init/1
  - Module:terminate/2
- gen_statem
  - Top of manual page
  - call/2
  - call/3
  - cast/2
  - enter_loop/4
  - enter_loop/5
  - enter_loop/6
  - reply/1
  - reply/2
  - start/3
  - start/4
  - start_link/3
  - start_link/4
  - stop/1
  - stop/3
  - Module:StateName/3
  - Module:StateName/3
  - Module:callback_mode/0
  - Module:code_change/4
  - Module:format_status/2
  - Module:handle_event/4
  - Module:handle_event/4
  - Module:init/1
  - Module:terminate/3
- io
  - Top of manual page
  - columns/0
  - columns/1
  - format/1
  - format/2
  - format/3
  - fread/2
  - fread/3
  - fwrite/1
  - fwrite/2
  - fwrite/3
  - get_chars/2
  - get_chars/3
  - get_line/1
  - get_line/2
  - getopts/0
  - getopts/1
  - nl/0
  - nl/1
  - parse_erl_exprs/1
  - parse_erl_exprs/2
  - parse_erl_exprs/3
  - parse_erl_exprs/4
  - parse_erl_form/1
  - parse_erl_form/2
  - parse_erl_form/3
  - parse_erl_form/4
  - printable_range/0
  - put_chars/1
  - put_chars/2
  - read/1
  - read/2
  - read/3
  - read/4
  - rows/0
  - rows/1
  - scan_erl_exprs/1
  - scan_erl_exprs/2
  - scan_erl_exprs/3
  - scan_erl_exprs/4
  - scan_erl_form/1
  - scan_erl_form/2
  - scan_erl_form/3
  - scan_erl_form/4
  - setopts/1
  - setopts/2
  - write/1
  - write/2
- io_lib
  - Top of manual page
  - build_text/1
  - char_list/1
  - deep_char_list/1
  - deep_latin1_char_list/1
  - format/2
  - format/3
  - fread/2
  - fread/3
  - fwrite/2
  - fwrite/3
  - indentation/2
  - latin1_char_list/1
  - nl/0
  - print/1
  - print/4
  - printable_latin1_list/1
  - printable_list/1
  - printable_unicode_list/1
  - scan_format/2
  - unscan_format/1
  - write/1
  - write/2
  - write_atom/1
  - write_atom_as_latin1/1
  - write_char/1
  - write_char_as_latin1/1
  - write_latin1_char/1
  - write_latin1_string/1
  - write_string/1
  - write_string_as_latin1/1
- lists
  - Top of manual page
  - all/2
  - any/2
  - append/1
  - append/2
  - concat/1
  - delete/2
  - droplast/1
  - dropwhile/2
  - duplicate/2
  - filter/2
  - filtermap/2
  - flatlength/1
  - flatmap/2
  - flatten/1
  - flatten/2
  - foldl/3
  - foldr/3
  - foreach/2
  - join/2
  - keydelete/3
  - keyfind/3
  - keymap/3
  - keymember/3
  - keymerge/3
  - keyreplace/4
  - keysearch/3
  - keysort/2
  - keystore/4
  - keytake/3
  - last/1
  - map/2
  - mapfoldl/3
  - mapfoldr/3
  - max/1
  - member/2
  - merge/1
  - merge/2
  - merge/3
  - merge3/3
  - min/1
  - nth/2
  - nthtail/2
  - partition/2
  - prefix/2
  - reverse/1
  - reverse/2
  - search/2
  - seq/2
  - seq/3
  - sort/1
  - sort/2
  - split/2
  - splitwith/2
  - sublist/2
  - sublist/3
  - subtract/2
  - suffix/2
  - sum/1
  - takewhile/2
  - ukeymerge/3
  - ukeysort/2
  - umerge/1
  - umerge/2
  - umerge/3
  - umerge3/3
  - unzip/1
  - unzip3/1
  - usort/1
  - usort/2
  - zip/2
  - zip3/3
  - zipwith/3
  - zipwith3/4
- log_mf_h
  - Top of manual page
  - init/3
  - init/4
- maps
  - Top of manual page
  - filter/2
  - find/2
  - fold/3
  - from_list/1
  - get/2
  - get/3
  - is_key/2
  - iterator/1
  - keys/1
  - map/2
  - merge/2
  - new/0
  - next/1
  - put/3
  - remove/2
  - size/1
  - take/2
  - to_list/1
  - update/3
  - update_with/3
  - update_with/4
  - values/1
  - with/2
  - without/2
- math
  - Top of manual page
  - acos/1
  - acosh/1
  - asin/1
  - asinh/1
  - atan/1
  - atan2/2
  - atanh/1
  - ceil/1
  - cos/1
  - cosh/1
  - erf/1
  - erfc/1
  - exp/1
  - floor/1
  - fmod/2
  - log/1
  - log10/1
  - log2/1
  - pi/0
  - pow/2
  - sin/1
  - sinh/1
  - sqrt/1
  - tan/1
  - tanh/1
- ms_transform
  - Top of manual page
  - format_error/1
  - parse_transform/2
  - transform_from_shell/3
- orddict
  - Top of manual page
  - append/3
  - append_list/3
  - erase/2
  - fetch/2
  - fetch_keys/1
  - filter/2
  - find/2
  - fold/3
  - from_list/1
  - is_empty/1
  - is_key/2
  - map/2
  - merge/3
  - new/0
  - size/1
  - store/3
  - take/2
  - to_list/1
  - update/3
  - update/4
  - update_counter/3
- ordsets
  - Top of manual page
  - add_element/2
  - del_element/2
  - filter/2
  - fold/3
  - from_list/1
  - intersection/1
  - intersection/2
  - is_disjoint/2
  - is_element/2
  - is_empty/1
  - is_set/1
  - is_subset/2
  - new/0
  - size/1
  - subtract/2
  - to_list/1
  - union/1
  - union/2
- pool
  - Top of manual page
  - attach/1
  - get_node/0
  - get_nodes/0
  - pspawn/3
  - pspawn_link/3
  - start/1
  - start/2
  - stop/0
- proc_lib
  - Top of manual page
  - format/1
  - format/2
  - format/3
  - hibernate/3
  - init_ack/1
  - init_ack/2
  - initial_call/1
  - spawn/1
  - spawn/2
  - spawn/3
  - spawn/4
  - spawn_link/1
  - spawn_link/2
  - spawn_link/3
  - spawn_link/4
  - spawn_opt/2
  - spawn_opt/3
  - spawn_opt/4
  - spawn_opt/5
  - start/3
  - start/4
  - start/5
  - start_link/3
  - start_link/4
  - start_link/5
  - stop/1
  - stop/3
  - translate_initial_call/1
- proplists
  - Top of manual page
  - append_values/2
  - compact/1
  - delete/2
  - expand/2
  - get_all_values/2
  - get_bool/2
  - get_keys/1
  - get_value/2
  - get_value/3
  - is_defined/2
  - lookup/2
  - lookup_all/2
  - normalize/2
  - property/1
  - property/2
  - split/2
  - substitute_aliases/2
  - substitute_negations/2
  - unfold/1
- qlc
  - Top of manual page
  - append/1
  - append/2
  - cursor/1
  - cursor/2
  - delete_cursor/1
  - e/1
  - e/2
  - eval/1
  - eval/2
  - fold/3
  - fold/4
  - format_error/1
  - info/1
  - info/2
  - keysort/2
  - keysort/3
  - next_answers/1
  - next_answers/2
  - q/1
  - q/2
  - sort/1
  - sort/2
  - string_to_handle/1
  - string_to_handle/2
  - string_to_handle/3
  - table/2
- queue
  - Top of manual page
  - cons/2
  - daeh/1
  - drop/1
  - drop_r/1
  - filter/2
  - from_list/1
  - get/1
  - get_r/1
  - head/1
  - in/2
  - in_r/2
  - init/1
  - is_empty/1
  - is_queue/1
  - join/2
  - lait/1
  - last/1
  - len/1
  - liat/1
  - member/2
  - new/0
  - out/1
  - out_r/1
  - peek/1
  - peek_r/1
  - reverse/1
  - snoc/2
  - split/2
  - tail/1
  - to_list/1
- rand
  - Top of manual page
  - export_seed/0
  - export_seed_s/1
  - jump/0
  - jump/1
  - normal/0
  - normal/2
  - normal_s/1
  - normal_s/3
  - seed/1
  - seed/2
  - seed_s/1
  - seed_s/2
  - uniform/0
  - uniform/1
  - uniform_real/0
  - uniform_real_s/1
  - uniform_s/1
  - uniform_s/2
- random
  - Top of manual page
  - seed/0
  - seed/1
  - seed/3
  - seed0/0
  - uniform/0
  - uniform/1
  - uniform_s/1
  - uniform_s/2
- re
  - Top of manual page
  - compile/1
  - compile/2
  - inspect/2
  - replace/3
  - replace/4
  - run/2
  - run/3
  - split/2
  - split/3
  - version/0
- sets
  - Top of manual page
  - add_element/2
  - del_element/2
  - filter/2
  - fold/3
  - from_list/1
  - intersection/1
  - intersection/2
  - is_disjoint/2
  - is_element/2
  - is_empty/1
  - is_set/1
  - is_subset/2
  - new/0
  - size/1
  - subtract/2
  - to_list/1
  - union/1
  - union/2
- shell
  - Top of manual page
  - catch_exception/1
  - history/1
  - prompt_func/1
  - results/1
  - start_restricted/1
  - stop_restricted/0
  - strings/1
- shell_default
- slave
  - Top of manual page
  - pseudo/1
  - pseudo/2
  - relay/1
  - start/1
  - start/2
  - start/3
  - start_link/1
  - start_link/2
  - start_link/3
  - stop/1
- sofs
  - Top of manual page
  - a_function/1
  - a_function/2
  - canonical_relation/1
  - composite/2
  - constant_function/2
  - converse/1
  - difference/2
  - digraph_to_family/1
  - digraph_to_family/2
  - domain/1
  - drestriction/2
  - drestriction/3
  - empty_set/0
  - extension/3
  - family/1
  - family/2
  - family_difference/2
  - family_domain/1
  - family_field/1
  - family_intersection/1
  - family_intersection/2
  - family_projection/2
  - family_range/1
  - family_specification/2
  - family_to_digraph/1
  - family_to_digraph/2
  - family_to_relation/1
  - family_union/1
  - family_union/2
  - field/1
  - from_external/2
  - from_sets/1
  - from_term/1
  - from_term/2
  - image/2
  - intersection/1
  - intersection/2
  - intersection_of_family/1
  - inverse/1
  - inverse_image/2
  - is_a_function/1
  - is_disjoint/2
  - is_empty_set/1
  - is_equal/2
  - is_set/1
  - is_sofs_set/1
  - is_subset/2
  - is_type/1
  - join/4
  - multiple_relative_product/2
  - no_elements/1
  - partition/1
  - partition/2
  - partition/3
  - partition_family/2
  - product/1
  - product/2
  - projection/2
  - range/1
  - relation/1
  - relation/2
  - relation_to_family/1
  - relative_product/1
  - relative_product/2
  - relative_product1/2
  - restriction/2
  - restriction/3
  - set/1
  - set/2
  - specification/2
  - strict_relation/1
  - substitution/2
  - symdiff/2
  - symmetric_partition/2
  - to_external/1
  - to_sets/1
  - type/1
  - union/1
  - union/2
  - union_of_family/1
  - weak_relation/1
- string
  - Top of manual page
  - casefold/1
  - centre/2
  - centre/3
  - chars/2
  - chars/3
  - chomp/1
  - chr/2
  - concat/2
  - copies/2
  - cspan/2
  - equal/2
  - equal/3
  - equal/4
  - find/2
  - find/3
  - is_empty/1
  - join/2
  - left/2
  - left/3
  - len/1
  - length/1
  - lexemes/2
  - lowercase/1
  - next_codepoint/1
  - next_grapheme/1
  - nth_lexeme/3
  - pad/2
  - pad/3
  - pad/4
  - prefix/2
  - rchr/2
  - replace/3
  - replace/4
  - reverse/1
  - right/2
  - right/3
  - rstr/2
  - slice/2
  - slice/3
  - span/2
  - split/2
  - split/3
  - str/2
  - strip/1
  - strip/2
  - strip/3
  - sub_string/2
  - sub_string/3
  - sub_word/2
  - sub_word/3
  - substr/2
  - substr/3
  - take/2
  - take/3
  - take/4
  - titlecase/1
  - to_float/1
  - to_graphemes/1
  - to_integer/1
  - to_lower/1
  - to_upper/1
  - tokens/2
  - trim/1
  - trim/2
  - trim/3
  - uppercase/1
  - words/1
  - words/2
- supervisor
  - Top of manual page
  - check_childspecs/1
  - count_children/1
  - delete_child/2
  - get_childspec/2
  - restart_child/2
  - start_child/2
  - start_link/2
  - start_link/3
  - terminate_child/2
  - which_children/1
  - Module:init/1
- supervisor_bridge
  - Top of manual page
  - start_link/2
  - start_link/3
  - Module:init/1
  - Module:terminate/2
- sys
  - Top of manual page
  - change_code/4
  - change_code/5
  - debug_options/1
  - get_debug/3
  - get_log/1
  - get_state/1
  - get_state/2
  - get_status/1
  - get_status/2
  - handle_debug/4
  - handle_system_msg/6
  - install/2
  - install/3
  - log/2
  - log/3
  - log_to_file/2
  - log_to_file/3
  - no_debug/1
  - no_debug/2
  - print_log/1
  - remove/2
  - remove/3
  - replace_state/2
  - replace_state/3
  - resume/1
  - resume/2
  - statistics/2
  - statistics/3
  - suspend/1
  - suspend/2
  - terminate/2
  - terminate/3
  - trace/2
  - trace/3
  - Module:system_code_change/4
  - Module:system_continue/3
  - Module:system_get_state/1
  - Module:system_replace_state/2
  - Module:system_terminate/4
- timer
  - Top of manual page
  - apply_after/4
  - apply_interval/4
  - cancel/1
  - exit_after/2
  - exit_after/3
  - hms/3
  - hours/1
  - kill_after/1
  - kill_after/2
  - minutes/1
  - now_diff/2
  - seconds/1
  - send_after/2
  - send_after/3
  - send_interval/2
  - send_interval/3
  - sleep/1
  - start/0
  - tc/1
  - tc/2
  - tc/3
- unicode
  - Top of manual page
  - bom_to_encoding/1
  - characters_to_binary/1
  - characters_to_binary/2
  - characters_to_binary/3
  - characters_to_list/1
  - characters_to_list/2
  - characters_to_nfc_binary/1
  - characters_to_nfc_list/1
  - characters_to_nfd_binary/1
  - characters_to_nfd_list/1
  - characters_to_nfkc_binary/1
  - characters_to_nfkc_list/1
  - characters_to_nfkd_binary/1
  - characters_to_nfkd_list/1
  - encoding_to_bom/1
- uri_string
  - Top of manual page
  - compose_query/1
  - compose_query/2
  - dissect_query/1
  - normalize/1
  - normalize/2
  - parse/1
  - recompose/1
  - transcode/2
- win32reg
  - Top of manual page
  - change_key/2
  - change_key_create/2
  - close/1
  - current_key/1
  - delete_key/1
  - delete_value/2
  - expand/1
  - format_error/1
  - open/1
  - set_value/3
  - sub_keys/1
  - value/2
  - values/1
- zip
  - Top of manual page
  - create/2
  - create/3
  - extract/1
  - extract/2
  - foldl/3
  - list_dir/1
  - list_dir/2
  - t/1
  - table/1
  - table/2
  - tt/1
  - unzip/1
  - unzip/2
  - zip/2
  - zip/3
  - zip_close/1
  - zip_get/1
  - zip_get/2
  - zip_list_dir/1
  - zip_open/1
  - zip_open/2

# gen_fsm

### Module

gen_fsm

### Module Summary

Deprecated and replaced by gen_statem

### Description

Deprecated and replaced by gen_statem

### Migration to gen_statem

Here follows a simple example of turning a gen_fsm into a gen_statem. The example comes from the previous Users Guide for gen_fsm

    -module(code_lock).
    -define(NAME, code_lock).
    %-define(BEFORE_REWRITE, true).

    -ifdef(BEFORE_REWRITE).
    -behaviour(gen_fsm).
    -else.
    -behaviour(gen_statem).
    -endif.

    -export([start_link/1, button/1, stop/0]).

    -ifdef(BEFORE_REWRITE).
    -export([init/1, locked/2, open/2, handle_sync_event/4, handle_event/3,
    	 handle_info/3, terminate/3, code_change/4]).
    -else.
    -export([init/1, callback_mode/0, locked/3, open/3, terminate/3, code_change/4]).
    %% Add callback__mode/0
    %% Change arity of the state functions
    %% Remove handle_info/3
    -endif.

    -ifdef(BEFORE_REWRITE).
    start_link(Code) ->
        gen_fsm:start_link({local, ?NAME}, ?MODULE, Code, []).
    -else.
    start_link(Code) ->
        gen_statem:start_link({local,?NAME}, ?MODULE, Code, []).
    -endif.

    -ifdef(BEFORE_REWRITE).
    button(Digit) ->
        gen_fsm:send_event(?NAME, {button, Digit}).
    -else.
    button(Digit) ->
        gen_statem:cast(?NAME, {button,Digit}).
        %% send_event is asynchronous and becomes a cast
    -endif.

    -ifdef(BEFORE_REWRITE).
    stop() ->
        gen_fsm:sync_send_all_state_event(?NAME, stop).
    -else.
    stop() ->
        gen_statem:call(?NAME, stop).
        %% sync_send is synchronous and becomes call
        %% all_state is handled by callback code in gen_statem
    -endif.

    init(Code) ->
        do_lock(),
        Data = #{code => Code, remaining => Code},
        {ok, locked, Data}.

    -ifdef(BEFORE_REWRITE).
    -else.
    callback_mode() ->
        state_functions.
    %% state_functions mode is the mode most similar to
    %% gen_fsm. There is also handle_event mode which is
    %% a fairly different concept.
    -endif.

    -ifdef(BEFORE_REWRITE).
    locked({button, Digit}, Data0) ->
        case analyze_lock(Digit, Data0) of
    	{open = StateName, Data} ->
    	    {next_state, StateName, Data, 10000};
    	{StateName, Data} ->
    	    {next_state, StateName, Data}
        end.
    -else.
    locked(cast, {button,Digit}, Data0) ->
        case analyze_lock(Digit, Data0) of
    	{open = StateName, Data} ->
    	    {next_state, StateName, Data, 10000};
    	{StateName, Data} ->
    	    {next_state, StateName, Data}
        end;
    locked({call, From}, Msg, Data) ->
        handle_call(From, Msg, Data);
    locked({info, Msg}, StateName, Data) ->
        handle_info(Msg, StateName, Data).
    %% Arity differs
    %% All state events are dispatched to handle_call and handle_info help
    %% functions. If you want to handle a call or cast event specifically
    %% for this state you would add a special clause for it above.
    -endif.

    -ifdef(BEFORE_REWRITE).
    open(timeout, State) ->
         do_lock(),
        {next_state, locked, State};
    open({button,_}, Data) ->
        {next_state, locked, Data}.
    -else.
    open(timeout, _, Data) ->
        do_lock(),
        {next_state, locked, Data};
    open(cast, {button,_}, Data) ->
        {next_state, locked, Data};
    open({call, From}, Msg, Data) ->
        handle_call(From, Msg, Data);
    open(info, Msg, Data) ->
        handle_info(Msg, open, Data).
    %% Arity differs
    %% All state events are dispatched to handle_call and handle_info help
    %% functions. If you want to handle a call or cast event specifically
    %% for this state you would add a special clause for it above.
    -endif.

    -ifdef(BEFORE_REWRITE).
    handle_sync_event(stop, _From, _StateName, Data) ->
        {stop, normal, ok, Data}.

    handle_event(Event, StateName, Data) ->
        {stop, {shutdown, {unexpected, Event, StateName}}, Data}.

    handle_info(Info, StateName, Data) ->
        {stop, {shutdown, {unexpected, Info, StateName}}, StateName, Data}.
    -else.
    -endif.

    terminate(_Reason, State, _Data) ->
        State =/= locked andalso do_lock(),
        ok.
    code_change(_Vsn, State, Data, _Extra) ->
        {ok, State, Data}.

    %% Internal functions
    -ifdef(BEFORE_REWRITE).
    -else.
    handle_call(From, stop, Data) ->
         {stop_and_reply, normal,  {reply, From, ok}, Data}.

    handle_info(Info, StateName, Data) ->
        {stop, {shutdown, {unexpected, Info, StateName}}, StateName, Data}.
    %% These are internal functions for handling all state events
    %% and not behaviour callbacks as in gen_fsm
    -endif.

    analyze_lock(Digit, #{code := Code, remaining := Remaining} = Data) ->
         case Remaining of
             [Digit] ->
    	     do_unlock(),
    	     {open,  Data#{remaining := Code}};
             [Digit|Rest] -> % Incomplete
                 {locked, Data#{remaining := Rest}};
             _Wrong ->
                 {locked, Data#{remaining := Code}}
         end.

    do_lock() ->
        io:format("Lock~n", []).
    do_unlock() ->
        io:format("Unlock~n", []).