@@ -541,13 +541,14 @@ <h1><a href="https://github.com/bloomberg/bucklescript">BuckleScript</a> User Ma
541
541
</ ul >
542
542
</ li >
543
543
< 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 >
545
545
< ul class ="sectlevel3 ">
546
546
< li > < a href ="#_using_polymorphic_variant_to_model_enums_and_string_types "> Using polymorphic variant to model enums and string types</ a > </ li >
547
547
< li > < a href ="#_using_polymorphic_variant_to_model_event_listener "> Using polymorphic variant to model event listener</ a > </ li >
548
548
< li > < a href ="#_phantom_arguments_and_ad_hoc_polyrmophism "> Phantom Arguments and ad-hoc polyrmophism</ a > </ li >
549
549
</ ul >
550
550
</ li >
551
+ < li > < a href ="#_fixed_arguments "> Fixed Arguments</ a > </ li >
551
552
< li > < a href ="#_binding_to_nodejs_special_variables_bs_node "> Binding to NodeJS special variables: bs.node</ a > </ li >
552
553
< li > < a href ="#_binding_to_callbacks_high_order_function "> Binding to callbacks (high-order function)</ a >
553
554
< ul class ="sectlevel3 ">
@@ -1717,7 +1718,7 @@ <h3 id="_splice_calling_convention_bs_splice"><a class="anchor" href="#_splice_c
1717
1718
</ div >
1718
1719
</ div >
1719
1720
< 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 >
1721
1722
< div class ="sect3 ">
1722
1723
< 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 >
1723
1724
< div class ="paragraph ">
@@ -1921,6 +1922,85 @@ <h4 id="_phantom_arguments_and_ad_hoc_polyrmophism"><a class="anchor" href="#_ph
1921
1922
</ div >
1922
1923
</ div >
1923
1924
< 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 ">
1924
2004
< 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 >
1925
2005
< div class ="paragraph ">
1926
2006
< 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