<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace;font-size:small">hi, all<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small">

I'm new to Mercury and trying to use it as a language on Erlang VM with strict and obligatory static checker. I've tried to wrap the basic list types in Erlang but failed. The following is what I've done. I know the definitions are wrong. But I don't know how to wrap the improper lists in an easy, expressive, efficient way so that I can use them like how I use them in Erlang. Please help me or point me how to solve this problem. Thanks.<br>

<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small">In Mercury:<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small"><br>%% nonempty_improper_list()<br>

:- type erlang_nonempty_improper_list(Contents, Termination) ---><br>          [Contents | Termination]<br>        ; [Contents | erlang_nonempty_improper_list(Contents, Termination)].<br><br>%% wrap improper_list() <br>

:- type erlang_improper_list(Contents, Termination) ---><br>          erlang_improper_list( Termination )           % can't use Termination directly<br>        ; erlang_improper_list( erlang_nonempty_improper_list(Contents, Termination) ).<br>

<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small">But I can write this in Erlang:<br><br>-type erlang_nonempty_improper_list(Contents, Termination) ::<br>          [Contents | Termination]<br>

        | [Contents | erlang_nonempty_improper_list(Contents, Termination)].<br><br>%% improper_list() wrapping<br>-type erlang_improper_list(Contents, Termination) ::<br>          Termination<br>        | erlang_nonempty_improper_list(Contents, Termination).<br>

<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:small"><br clear="all"></div><div>     Best regards,<br>Xiaofeng Yang</div>
</div>