@@ -541,13 +541,14 @@ <h1><a href="https://github.com/bloomberg/bucklescript">BuckleScript</a> User Ma
541541</ ul >
542542</ li >
543543< li > < a href ="#_splice_calling_convention_bs_splice "> Splice calling convention: bs.splice</ a > </ li >
544- < li > < a href ="#_special_types_on_external_declarations_bs_string_bs_int_bs_ignore "> Special types on external declarations: bs.string, bs.int, bs.ignore</ a >
544+ < li > < a href ="#_special_types_on_external_declarations_bs_string_bs_int_bs_ignore_bs_as "> Special types on external declarations: bs.string, bs.int, bs.ignore, bs.as </ a >
545545< ul class ="sectlevel3 ">
546546< li > < a href ="#_using_polymorphic_variant_to_model_enums_and_string_types "> Using polymorphic variant to model enums and string types</ a > </ li >
547547< li > < a href ="#_using_polymorphic_variant_to_model_event_listener "> Using polymorphic variant to model event listener</ a > </ li >
548548< li > < a href ="#_phantom_arguments_and_ad_hoc_polyrmophism "> Phantom Arguments and ad-hoc polyrmophism</ a > </ li >
549549</ ul >
550550</ li >
551+ < li > < a href ="#_fixed_arguments "> Fixed Arguments</ a > </ li >
551552< li > < a href ="#_binding_to_nodejs_special_variables_bs_node "> Binding to NodeJS special variables: bs.node</ a > </ li >
552553< li > < a href ="#_binding_to_callbacks_high_order_function "> Binding to callbacks (high-order function)</ a >
553554< ul class ="sectlevel3 ">
@@ -1717,7 +1718,7 @@ <h3 id="_splice_calling_convention_bs_splice"><a class="anchor" href="#_splice_c
17171718</ div >
17181719</ div >
17191720< div class ="sect2 ">
1720- < h3 id ="_special_types_on_external_declarations_bs_string_bs_int_bs_ignore "> < a class ="anchor " href ="#_special_types_on_external_declarations_bs_string_bs_int_bs_ignore "> </ a > Special types on external declarations: bs.string, bs.int, bs.ignore</ h3 >
1721+ < h3 id ="_special_types_on_external_declarations_bs_string_bs_int_bs_ignore_bs_as "> < a class ="anchor " href ="#_special_types_on_external_declarations_bs_string_bs_int_bs_ignore_bs_as "> </ a > Special types on external declarations: bs.string, bs.int, bs.ignore, bs.as </ h3 >
17211722< div class ="sect3 ">
17221723< h4 id ="_using_polymorphic_variant_to_model_enums_and_string_types "> < a class ="anchor " href ="#_using_polymorphic_variant_to_model_enums_and_string_types "> </ a > Using polymorphic variant to model enums and string types</ h4 >
17231724< div class ="paragraph ">
@@ -1921,6 +1922,85 @@ <h4 id="_phantom_arguments_and_ad_hoc_polyrmophism"><a class="anchor" href="#_ph
19211922</ div >
19221923</ div >
19231924< div class ="sect2 ">
1925+ < h3 id ="_fixed_arguments "> < a class ="anchor " href ="#_fixed_arguments "> </ a > Fixed Arguments</ h3 >
1926+ < div class ="paragraph ">
1927+ < p > Contrary to the Phantom arguments, < code > _[@bs.as]</ code > is introduced to attach the const
1928+ data.</ p >
1929+ </ div >
1930+ < div class ="paragraph ">
1931+ < p > For example:</ p >
1932+ </ div >
1933+ < div class ="listingblock ">
1934+ < div class ="content ">
1935+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> external</ span > < span class ="tok-n "> process_on_exit</ span > < span class ="tok-o "> :</ span > < span class ="tok-o "> (_</ span > < span class ="tok-o "> [@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> as</ span > < span class ="tok-s2 "> "exit"</ span > < span class ="tok-o "> ])</ span > < span class ="tok-o "> -></ span > < span class ="tok-o "> (</ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> )</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> =</ span >
1936+ < span class ="tok-s2 "> "process.on"</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span >
1937+
1938+ < span class ="tok-k "> let</ span > < span class ="tok-bp "> ()</ span > < span class ="tok-o "> =</ span >
1939+ < span class ="tok-n "> process_on_exit</ span > < span class ="tok-o "> (</ span > < span class ="tok-k "> fun</ span > < span class ="tok-n "> exit_code</ span > < span class ="tok-o "> -></ span >
1940+ < span class ="tok-nn "> Js</ span > < span class ="tok-p "> .</ span > < span class ="tok-n "> log</ span > < span class ="tok-o "> (</ span > < span class ="tok-s2 "> "error code: "</ span > < span class ="tok-o "> ^</ span > < span class ="tok-n "> string_of_int</ span > < span class ="tok-n "> exit_code</ span > < span class ="tok-o "> ))</ span > </ code > </ pre >
1941+ </ div >
1942+ </ div >
1943+ < div class ="paragraph ">
1944+ < p > Output</ p >
1945+ </ div >
1946+ < div class ="listingblock ">
1947+ < div class ="content ">
1948+ < pre class ="pygments highlight "> < code data-lang ="js "> < span class ="tok-nx "> process</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> on</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "exit"</ span > < span class ="tok-p "> ,</ span > < span class ="tok-kd "> function</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> exit_code</ span > < span class ="tok-p "> )</ span > < span class ="tok-p "> {</ span >
1949+ < span class ="tok-nx "> console</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> log</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "error code: "</ span > < span class ="tok-o "> +</ span > < span class ="tok-nx "> exit_code</ span > < span class ="tok-p "> );</ span >
1950+ < span class ="tok-k "> return</ span > < span class ="tok-cm "> /* () */</ span > < span class ="tok-mi "> 0</ span > < span class ="tok-p "> ;</ span >
1951+ < span class ="tok-p "> });</ span > </ code > </ pre >
1952+ </ div >
1953+ </ div >
1954+ < div class ="paragraph ">
1955+ < p > It can also be used in combination with other attributes, for example:</ p >
1956+ </ div >
1957+ < div class ="listingblock ">
1958+ < div class ="content ">
1959+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> type</ span > < span class ="tok-n "> process</ span >
1960+
1961+ < span class ="tok-k "> external</ span > < span class ="tok-n "> on_exit</ span > < span class ="tok-o "> :</ span > < span class ="tok-o "> (_</ span > < span class ="tok-o "> [@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> as</ span > < span class ="tok-s2 "> "exit"</ span > < span class ="tok-o "> ])</ span > < span class ="tok-o "> -></ span > < span class ="tok-o "> (</ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> )</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> =</ span >
1962+ < span class ="tok-s2 "> "on"</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> send</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> pipe</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> process</ span > < span class ="tok-o "> ]</ span >
1963+ < span class ="tok-k "> let</ span > < span class ="tok-n "> register</ span > < span class ="tok-o "> (</ span > < span class ="tok-n "> p</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> process</ span > < span class ="tok-o "> )</ span > < span class ="tok-o "> =</ span >
1964+ < span class ="tok-n "> p</ span > < span class ="tok-o "> |></ span > < span class ="tok-n "> on_exit</ span > < span class ="tok-o "> (</ span > < span class ="tok-k "> fun</ span > < span class ="tok-n "> i</ span > < span class ="tok-o "> -></ span > < span class ="tok-nn "> Js</ span > < span class ="tok-p "> .</ span > < span class ="tok-n "> log</ span > < span class ="tok-n "> i</ span > < span class ="tok-o "> )</ span > </ code > </ pre >
1965+ </ div >
1966+ </ div >
1967+ < div class ="paragraph ">
1968+ < p > Output</ p >
1969+ </ div >
1970+ < div class ="listingblock ">
1971+ < div class ="content ">
1972+ < pre class ="pygments highlight "> < code data-lang ="js "> < span class ="tok-kd "> function</ span > < span class ="tok-nx "> register</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> p</ span > < span class ="tok-p "> )</ span > < span class ="tok-p "> {</ span >
1973+ < span class ="tok-k "> return</ span > < span class ="tok-nx "> p</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> on</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "exit"</ span > < span class ="tok-p "> ,</ span > < span class ="tok-kd "> function</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> i</ span > < span class ="tok-p "> )</ span > < span class ="tok-p "> {</ span >
1974+ < span class ="tok-nx "> console</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> log</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> i</ span > < span class ="tok-p "> );</ span >
1975+ < span class ="tok-k "> return</ span > < span class ="tok-cm "> /* () */</ span > < span class ="tok-mi "> 0</ span > < span class ="tok-p "> ;</ span >
1976+ < span class ="tok-p "> });</ span >
1977+ < span class ="tok-p "> }</ span > </ code > </ pre >
1978+ </ div >
1979+ </ div >
1980+ < div class ="paragraph ">
1981+ < p > Input</ p >
1982+ </ div >
1983+ < div class ="listingblock ">
1984+ < div class ="content ">
1985+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> external</ span > < span class ="tok-n "> io_config</ span > < span class ="tok-o "> :</ span >
1986+ < span class ="tok-n "> stdio</ span > < span class ="tok-o "> :(</ span > < span class ="tok-o "> _</ span > < span class ="tok-o "> [@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> as</ span > < span class ="tok-s2 "> "inherit"</ span > < span class ="tok-o "> ])</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> cwd</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> string</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> -></ span > < span class ="tok-o "> _</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> obj</ span > < span class ="tok-o "> ]</ span >
1987+
1988+ < span class ="tok-k "> let</ span > < span class ="tok-n "> config</ span > < span class ="tok-o "> =</ span > < span class ="tok-n "> io_config</ span > < span class ="tok-o "> ~</ span > < span class ="tok-n "> cwd</ span > < span class ="tok-o "> :</ span > < span class ="tok-s2 "> "."</ span > < span class ="tok-bp "> ()</ span > </ code > </ pre >
1989+ </ div >
1990+ </ div >
1991+ < div class ="paragraph ">
1992+ < p > Output</ p >
1993+ </ div >
1994+ < div class ="listingblock ">
1995+ < div class ="content ">
1996+ < pre class ="pygments highlight "> < code data-lang ="js "> < span class ="tok-kd "> var</ span > < span class ="tok-nx "> config</ span > < span class ="tok-o "> =</ span > < span class ="tok-p "> {</ span >
1997+ < span class ="tok-nx "> stdio</ span > < span class ="tok-o "> :</ span > < span class ="tok-s2 "> "inherit"</ span > < span class ="tok-p "> ,</ span >
1998+ < span class ="tok-nx "> cwd</ span > < span class ="tok-o "> :</ span > < span class ="tok-s2 "> "."</ span >
1999+ < span class ="tok-p "> };</ span > </ code > </ pre >
2000+ </ div >
2001+ </ div >
2002+ </ div >
2003+ < div class ="sect2 ">
19242004< h3 id ="_binding_to_nodejs_special_variables_bs_node "> < a class ="anchor " href ="#_binding_to_nodejs_special_variables_bs_node "> </ a > Binding to NodeJS special variables: bs.node</ h3 >
19252005< div class ="paragraph ">
19262006< p > NodeJS has several file local variables: < code > < em > dirname</ code > , < code > </ em > filename</ code > , < code > module_</ code > , and < code > require</ code > ,
0 commit comments