PRATIQUE DES LANGAGES FONCTIONNELS TYPES

151
HAL Id: tel-00009013 https://tel.archives-ouvertes.fr/tel-00009013 Submitted on 13 Apr 2005 HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci- entific research documents, whether they are pub- lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers. L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés. PRATIQUE DES LANGAGES FONCTIONNELS TYPES Emmanuel Chailloux To cite this version: Emmanuel Chailloux. PRATIQUE DES LANGAGES FONCTIONNELS TYPES. Autre [cs.OH]. Université Pierre et Marie Curie - Paris VI, 2003. tel-00009013

Transcript of PRATIQUE DES LANGAGES FONCTIONNELS TYPES

Page 1: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

HAL Id: tel-00009013https://tel.archives-ouvertes.fr/tel-00009013

Submitted on 13 Apr 2005

HAL is a multi-disciplinary open accessarchive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come fromteaching and research institutions in France orabroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, estdestinée au dépôt et à la diffusion de documentsscientifiques de niveau recherche, publiés ou non,émanant des établissements d’enseignement et derecherche français ou étrangers, des laboratoirespublics ou privés.

PRATIQUE DES LANGAGES FONCTIONNELSTYPES

Emmanuel Chailloux

To cite this version:Emmanuel Chailloux. PRATIQUE DES LANGAGES FONCTIONNELS TYPES. Autre [cs.OH].Université Pierre et Marie Curie - Paris VI, 2003. �tel-00009013�

Page 2: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

Habilitationa Diriger des Recherches

presentee a

L’UNIVERSITE PARIS VI

Specialite

INFORMATIQUE

par

Emmanuel CHAILLOUX

Sujet du memoire

Pratique des langages fonctionnels types

Soutenue le 19 decembre 2003 devant la commission d’examen composee de

MM. Guy Cousineau President

Benjamin Goldberg Rapporteurs

Michel Mauny

Christian Queinnec

Gaetan Hains Examinateurs

Etienne Morel

Page 3: PRATIQUE DES LANGAGES FONCTIONNELS TYPES
Page 4: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

a al-ma-ce et ma-ri-no,

mes passwords preferes.

Page 5: PRATIQUE DES LANGAGES FONCTIONNELS TYPES
Page 6: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

������� �� �

�� � ���� �������� ��� ������ � �������� �� �� ��������� �� ��������� ������ � ����� � � ��� ������� ���!�� "��� ������������ ���� "� ����� #�����" ��� "��#�#�� $���������"� �����%�� ��� �&� �� �� ���������� ������ � �� "��� �����%�� ' �� "� �� ��"����� ��( ���"�������� �� ������� ��� " �������� ���)�"��� �� "����������� ���� �� ����"��� � ��� � ��"� )��� �*� ���� ��)"��� " ������#�� ��� �� ��� "��#�#�� + ������)"� ����� �� ��,����� �

- ������������� ��#�#� "�� �������� ���. .� �� ��� "��#�#�� �"#����� �%��� ��%������"� �� "� ������ ���� "��"��#�#�� $���������"� �����%�� ��� �&� �� + ���� �������"���� ��� "� "��#�#� �/0- + & ��� ������ � �� "��#�#� � ���� � �������"����� ����� "�� ��,������ ��������� � -� ������������ �� ���� �"�� ��������� %�� $�� �""� + ) ���%�� �������� �����#�� ������ ����1 ������%��� �

-�� ��2 ��� �) ����� ��� ��� ������ �� �� ��( ��������� � 3"� ��#���� ��� �� ������( ������� �� ������� "��� "� ���#�� ����� $���������""� �&� �� � 4 ������� ������( ��� "� ���#�� ����� ��� ����������� �� "����#�� ����� #�����%�� �� �����""� ���� 2 ����� ����� �

-�� ��������"�� ��)"�������� %�� �� � ���� ������ ���� 5678 + 56 98 :����� �� 56;8< + 5= 98 + 5>78 + 57=8 �� 56?8 � ���"�� ��������� 9 �� 6 + 56@8 + 5@78 + 56A8 �� 5668 � ��� "� �������� 7 + 5>;8 � ��� "� �������� > + 5A8 + 5> 98 �� 597>8 � ��� "��������� B � -� �������� @ �� ����� ��� ����"���� ����� ��� ������ ��������� � -� )�)"��#������ ��� ����������� !� �� �� �� ��� �

3" ��� ���2 ���� ��"���� �� ���"�� �� ������( ������� �� � � ��"� �������� � ��) ����� � � ��� ����&� �������������� ���� "�� ������������� �� ���%�� �������� "� ��� ��� ��� �� ��� ������( �� � ��(�"�%��� ����"��� ����"����� "�� ������������ $������ �

-� ����"����� �� � ���� ������� ��� " �� � ������� �� �&��#� � ��� " ����� )"� ��� ��� �� �) ����� ���� "����, ������ ��������� �� ������ �� ��� ��� ����#� ���� �� "� �������� ������ � -�� "��#�#�� $���������"� ������ ��C������ ��� "�� "��#�#�� �)2 ��� �� �� ���� ������� �� ���� �(������� �� ������#������ ���� � �������"��#�#�� �� �� �����""�� �"���.$�� �� � ��(������� � ����� ��C����� � ��� ���)"� ���� D "�� "��#�#�� �)2 ����� ���������� �� ������ ��� �&� �� � E� ��� ����.�.�" �� ��� F

G�� �)�� �� "��#�#� + 2 ����"��� "� ��� � H"��#�#� $���������" �&� �I � ��� "�� "��#�#�� �����%�� ���J$���� ����&� �� � K ��� �*� "�� "��#�#�� $���������"� �&�� �%�� ��� �&� �� #����������� "��� ������ "� ����!������ ����&� �� �

Page 7: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��

Page 8: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

L MN M�OPMN M��

-� �"����� �� �� ������( ���� "� ����"��� �� ��""�) �������� � ��������� ���� ����) "�� �� � "�� ��.��������� ��)"�������� ' 0 ��Q�.R ��#�� �� /����� + �"� ��� ��� �" + ����.0 ��� S) �� + ��������� �� G��"��� � ����#��� +T�& ��������� + ��������� U���&+ T��#���� V���&+ G����" 0 �����&+ W����X" 0 ����"����� + K���� G�#��� +��������� E������� �� /��Y���� Z�Y��1 �4 ������� ��""�) �������� ���� ���� � �������) "�� � S ""�� ����������� �� #���� �� �� ������" + �� �������������� ��� + �� ������&� �� ��� !��"���� + �� �� ���!������� �� ����� + ��� � �� ����� �(��� �� � ��������������

" ����� )"� ��� ��""�#��� %�� ��� �������� � ��� ����� ���� �0 ���� '[ T�& ��������� + %�� � �� ���� �� ���� � �� ������( ������ �� "��#��� ������ �� %�� � $��� ��2 ���� ���� "��"����� �� �������� �� 2 ��&+[ K��2 � �� T�"�) ��# + 0 ����" 0 ���& �� ��������� E������� %�� ��� ������� �� ���� ����� �� � ���� ������� ��� ��� �������� �� ���!%�� �� ������� ��� ���)"� �� �� �&��#� � ��C����� �� ������" � -������ ��%��� ��� ��� $��� ���"�� "� !��"������� �� �� � ���� +[ T����� V���� + %�� �� $��� #�*�� ��( 2 ���� �� ����""�"�� � �� ������� +[ S������ 0���" + � ��� ��� ��#��� �(� ��� ���� ��� "�� "��#�#�� �� "�� ��������� ���� �� ���#�� ����� ��� �� ����� "�� ��, ������� ������������ %�� ���� ������""��� + ���� �������"���� ��� '[ " ��%��� � GGZ %�� � ������ ��� ��� ������ � ������ ���������� ��� ���������� �� ������" ���$����)"�� ���& �����%��� ���� �� ���������� "� "��#� �� ����� ��� ���%�� �� ��� � )��� D[ �� " ����� )"� �� " �\UW � ���$�� ���%�� �� " ����������� G���� @ %�� + ��� �� ��������� + ��� ������ ��������""��� ����������� �������������� ��� ����� �� ������ "� �� ������ �� "��#�#� �/0- %�� � #���� ��� �&�� �� � �� !" ��� ��� #�]�� �����2 �� ������" �� " �3���� %�� ����� ����� ����� ��,��� �� �����""�� ������)������ �� �� )��� ) ��� "��#�#� �� ��� ���� ��!� �� ������ "�� �������� � ���������� %�� ��� ���%�� ����� + �� ������ ��,������ + ���������"�� �� �"����� � ������#��� �� ��2 ������� �� ������� �� �� �� ����� ��� G����" 0 �����& �� K���� G�#��� + ��""�#��� �� ���� ����� �� + �� %�� "� ���� ������ ����� "� "��#�� �� ��^ ��"� ������� �� " ��������� ��""������ � ��� "���� �

Page 9: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��

Page 10: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

_���� ` a O�P��

-� ���#�� ����� ��� ��� ����� ��� ���� "� �� �"�( ��� ��� )��� �������� ���� �� ����� �� ��� �� �� ����"����%�� �� " ����"������� ��� ���"�������� ����"��� ��� � ����� �������������� �������� �� ������ �� "� �������� ���"�#����"� ���"���� ��� ����� �� "��� $��#�"��� " ��(������� � 3" � ���� ��� ���� �� ���� ��� �� � ���� ���� �����#��� ����"�������� ���� "��� � �"�� %�������� � ����"�������� ������ ��� "� � ��� %�� " ����"������� ������� � �)����"� ��� "��� ������" �� ����� � G�� ������ " ��������� �� ���������� �� "��#�#�� �� � ���������� ���� �� ��.��"��� � ��� � �������b� ��� ��� �����"� �� #�����" + & �� ���� � ��� " ��������� �� ��$�� ���%�� � \�� %��������������� �"��� H%�� � ���.�� �������� ��� "�� "��#�#�� FI+ ����.������� " ���������� �� �� ���� ���""� " ����"�.���� ��� "��#�#�� �� �� "���� ���"�������� � c� � ��� & ��� ����� �� ����������� ����� ����� %������� ' H%��""������ "�� �������� ���. .� �� � ��� "��#�#� �� ���#�� �����I� d��� ��� ������� H"� ��"���� � ��)�������I ����" ������������� �� 5> 98 � � ���� �� ! " ��������� %�� ��� � �� � ���� � ���)�"������� ����#�� ��� ���������� � 3"� ���� ��� "� He fghijkl mln ogpq gq ln r spthispplon hue vnI� �� ����� ��#"�) � ��� ��� ���%�� �� ���������� ��� �� �"�������� ��� "��#�#�� ���� �� � ������������ ��( ����"� $���"����� "��� � �"�� + ��( �� ������ � ���#�.#�%��� � ��� "��� �����#�� ��� �� "� ��,����� �� "���� ���"�������� �G��� �� ������� "�� ����( %�� ��� ����#� ��� ������( + ���� ���������� "�� ������������%��� �������� ���"��#�#�� �� ���#�� ����� �� "�� �������� �� ������ � ��� "��#�#� � ��� �"� ���� � �� ������ � ���������� "� ���"� �� ���#�� ����� $���������""� � �� ���"� %�� ��� ���� �� ���� ������ � ��)��������� � ��� ������������%�� � c� ���"&�� �"��� ��� �����%��� ��������� �� �������� %�� ������� �� $���� " ����"������� �� �����$� �""� �� "��#�#�� � c� �������� ������� ��� ��"������ �� ��� ������( %�� ��� ������ �� ������� �� ��� �������( �����%��� � ���������� � ��� ���������� ���"����� ��������"� ��� "� "��#�#� �/0- �� � ����� �� ������" ��� "��#�#� + ���� " �� ������� ��� ��2 �������� + � �� ����� %� ��� ������ � ����� � �� � ������� �" ������ ���2 ������ �� )���( ���#�� ���� �wxyzxz{| x}z~����� ���{| |���{y��{}|

-�� "��#�#�� �"#����� �%��� � �� ������ �� ������� ��� ��"��"� ��� ��� ���������� �� ������� �� �"�(�� � 3"����� ��, �������� ��� "��#�#�� �� $�� �� �� ������� + ��� "��#�#�� �� ������� �� ��� "��#�#�� �� ��%����� �c� ����� ���� "� ����� ��� "��#�#�� ��%������"� )��� %�� "� �2 ����� ��� "��#�#�� ������� ������������ �� "������������ �� �� ������� ������ �� �� ��������� � ��� "� ����������� �- ������������� �� 5> 98 �(�"����� "� ��"���� � ��)��������� ���� "� ���������� �� "� #����� ��� "��#�#�� ��������� � ������ �� � ��� �������

H �ln ogpq gq ln ml e fsqfg��ghisp nsph lp l� lh mv� � ps� �flk� lh eskfhgph io lp geegfg�h tspnhg� �� lph ml psk lgk� ¡ ¢k mlo� ml olkfn minegfihvn£ og tsptle hisp lh og q lp ¤nl ml t¥gtkp m ¦lk� e fst¤mlphm ¦kpl � shi ghisp egfhgq vl § og  sosp hv m ¦g�nhfgifl¡¨ © ¦g�nhfgifl ml og � gt¥ip l¡ ª p e fl� ilf oilk£ kp ogpq gq l ml e fsqfg�� ghisp e lf� lh ml pvq oiq lfo ¦gne lth « � vtgpijkl ¬ ml o ¦sfmipghlkf ­ io gkhsfinl � ®� l � sk�oilf ol � sm¤ol mk � itfse fstlnn lkfsk ol nunh¤� l m ¦l�e osihghisp nkf oljk lo nlfg l� vtkhv ol e fsq fg�� l¡¨ © ¦g�nhfgifl mk � sm¤ol se vfghsifl¡ �g pshisp ml r spthisp jk l esnn¤ml nskn kp l r sf� l sk kpl gkhflog e okegfh mln ogpq gq ln lnh l�e fkp hvl gk� � gh¥ v� ghijkln lh psp � o ¦volthfspijk l¡ ¯ ¦kpl � gpi¤fl

9

Page 11: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7q vpvfgol£ oln ogpq gq ln nk �nhihk lph mln � sm¤oln r sf� lon gk� tsptle hispn e kfl� lph tgotk oghsifln ¡° on u q gqplp h lp l�e flnni ihv¡

¨ ¢ �nhfgifl oln lfflkfn ¡ ° o n ¦gq ih iti ml og hlphghi l ml q gfgp hif og n±flhv m ¦l� vtkhisp ­ kp e fsqfg�� lpl msih e gn nl hlf� iplf �fkhgol� lph sk ml lpif ipts¥ vflph lp tgn m ¦lfflkf¡ ²p mln � sulpneskf u egf lpif lnh ol huegq l nhghijk l r sfh mln e fsq fg�� ln lh og � inl lp ³k fl m ¦kp � vtgpin� lm ¦l� tle hispn ¡¨ ¢ �nhfgifl oln ts�esngphn ´iµ ¡ �ln ogpq gq ln ml e fsqfg�� ghisp mspp lph og esnni�ioihv ml mvtske lfkp l gee oitghisp lp mi� vflphn ts�esngphn osq itilon£ e okn sk � sipn ipmve lpmgphn lh gkhsps� ln ¡�g � smkogfihv e lf� lh kpl nhfkthkfghisp ml e okn ¥gkh p i lgk ml o ¦lpnl� �ol m ¦kpl gee oitghispts�e ol� l¡¨ ¢ �nhfgifl oln ts�esngphn ´iiµ ¡ � ¦l� in hlptl m ¦kpihvn ml e fsqfg�� ln g sk lfh og esnni�ioihv mlolkf fvkhioinghisp mgpn m ¦gkhfln tsphl� hln jk l tlk� ml olkf mv losee l� lph¡ �ln ogpq gq ln � s��� lhn tspnhihk lph kpl gkhfl gee fst¥ l ml og fvkhioing�ioihv e lf� lhhgph og fvgoinghisp hf¤n fge iml mle fshshue ln ¡I

¶ ����� "���� �� � ��� �2 ����� � ������� ������( � ��)��������� ���� � ��� " �������� ���)�"��� ����� "��#�#�� %��� ��� "� ���������� �� "� ��,����� � ����"�������� ���"����� ���� �� "��#�#� '[ /)������� "�� �� � ������ :���< :� ����������< � -� ����� �� ��� � ��� �� � ����� � ��� �������� ��""� �����#�� � %�� " �� ���� �� � ��� ���� �����#� ���� � ������� ���#�� �� �� � �������� ��� "�� �"� ����� ��� "� ���������� �[ /)������� "�� �� ������� :�� < :������� ���)�"���< � \�� ���"������� � ��� ���� ��� �� � �� ���� )"�#� ��)��%��� "�#����""�� ��������� �� �"������� "��#�#�� � �� �"�������� � -�� �� ������� ������� ����� ���������� �����$��� �� �� ��������� � ��""�.�� � �� �� �� �������� "�� ��#� ���� �� "�� ����"���� � ���� �" ������ #����� "�� �""� �������J����� �������� � ���� ����� �"������� )�)"�����%��� � ��(������� �[ /)������� "� ������������ � ����"�������� :� ����)�"���< � \�� $��� "� ���#�� � ��������� + ��"� �.�� � ���� ��(������ ��� ��, ������ ����"�� ��� �������J�&��� � + �� ������� �� ����#����� ���� $�� � � ����"��� �-� ������ �� ������ �)������� $���"��� ����� ��,����� � -� )�)"�����%�� � ��(������� � ������ ��� �����$������� "� �&��� � �� �������"��� �� ������ �� " ������$��� #�����%�� � � ���� ��� �(������� �� " ��)��������� ��"� ������ �

·�¸�¹�º¸����»��� ¼¸��¹�¼���� ��� �������� �º»������ �� c� � ��� ������ �� "�� "��#�#�� ��%������"� ��%����� #������ $� �""�� �� � ���� '[ ���"� � � �����$ ' �� ���#�� � ��� ��� ����� � ������������� D ���%�� ����������� ���!� �� ���� + &�� ���� "� � ������� �� ���� � � ���� "� ¹½¾¾��� ¿��¸� �À �� �(�"����� "� �����Á"� �� ��"��" �[ ���"� $���������" ' �� ���#�� � ������� "� ��"��" � ���� �(�������� + " ������b�� ��� ��� ��"��"� � ��$.$����� ��� �� �������� �� $�������� � \�� ��"��� $���������""� � ��� ������b��� �� � ����"��� �� " ���� �"� ���� ����� $������� � � ���� "� »�� ¿��¸� �À " ������ ��� ��"��"� � ��� �)����� "� ����"��� !��" � ����� � �� �[ "�#�%�� ' "� ��, ������ �� ���"� ��������� + " ������ �� )��� ��� "� ��"����� � \� ���#�� � ������� ����

����!�� �� ��!� �� ��� ��"����� + �� ������������ " ���)�� �� ����.)��� ��������� � S� ��� � ������ �������� )������ ��� �"��� �(�"���� � c� ����� ���� "� ¾½��� �º¹��¸���¿ �À "� �����Á"� � ���� ��� �(�"����� �[ ���"� �)2 ��� ' �� ���"� ���� �"�#�� "�� ������� ��� ���� ��� ��( ������ ���� � 3" �,�� ��� ���"�������� ��� " ���#��������� ��� ������� � -�� ������� ���� �"��� �������"��� ���� "�� ������ ���� : �������<� �& ��$����� � -�� �)2 ��� �� ���%���� ��� ��� �" �� ������� D ��""��.�� � ������ ���!�� " ����� ������� �� ���� �� ���"� � �¸��º ¼�¸ ��� �½��º�� �¶ �� ��� ��� �������#� � ��2 ���� ��� ������������%��� ��������"�� ��� "�� "��#�#�� '[ �&��#� ' �� "��#�#� � ��� ���� ��� �&� � + �&� � �&�� �%�� ��� �� �����%�� ��� � Z��"� "�� ���( ����������� � ������ ���� ���������� �� � �*�� " ��(������� � -� ��, ������ ����� ��( ����� �� � ��� �À "�����!������ �� �&� �� ���������� ' " ��(������� �� "� �� ��"����� �

Page 12: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

6

[ � �"& ������ � ' "� � ����) �"��� �� �� ��� ����� �� ��� �� "� $�� � :�� �&� �< ��� ������� � ��� "�� ��� �"��� $�������� �� �� ������� �������� �� ���� �"�� #�����" D �� ���� ��� ���� "� � � ���� ��� $� �""� ���&� �� �� ������� :� �"& ������ � �������"< + ���� �� ���!%�� ���%�� �&� � :� �"& ������ � ����1����"< �[ ��������� ' "�� ������( �� ��#���� � ��� �� �"����� � ��� "�� �)2 ��� �� �� ���"�� :�� ��%����#��< � ��������� "�� $� �""�� �� "��#�#�� $���"����� �"�� �� ���� "� �������#� "�#�%�� � ���� ���"������� ���� ��"��#�#� � �� �"�������� ���� ������������%��� ������%��� ��������� �� $��� ��� ����� ��( ) ������ H�"�� #������(I �������� '[ �*���� ' ������ �� �� ��������� " ��(������� ���� �� ���� ����������[ �^ ������ ' " ��(������� �� ���#�� � ��� H�����$�������I[ �����"���)�"��� ' � ������ ��������� ���� ��� �����""� ���"������� ��� ������� ��2 ������� ���������� ��������� ) ����� �� "�� ���!�� �S� ��#"� #�����"� �� ������ �� #�#��� ��� ��� ����� $������� �K ��� ������� �� "��#�#� ��� �� �"��#� ��� %����� $� �""�� ����������� � c� � ��� ����� ��� �(� �"� '[ 0 �����& ' "�#�%�� �� $���������" �����%�� ��� �&� �[ /�� ?B ' � � �����$ + �)2 ��� + �����%�� ��� �&� � ���� ���"�� #�����%���[ ���� ' c)2 ��� + � � �����$ + �����%�� ��� �� �&�� �%�� ��� �&� � + ���� �������� �� �"����� "� ��"�� ���������"� ������ � ���������� ��� ��� ��"���� $���������""�� �[ c)2 ������ �� " ' $���������" + � � �����$ + �)2 ��� + �&� � �����%�� ��� ���� ���"�� ���� ����� �

Â��Ã�� Ä ��Å���¹�� �� º�½ ����½� � ��� ������� -� ��������� � ��� ������� "��#�#� �������� "� �"��������� � ��� ��� �"� ���� �������� '[ ��� ) ������ � ���� ���"������� ��^ ��"� ��� �(��� �)"�� ���� "�� "��#�#�� �( ������� D[ � ��� ������� %�� �������� ������� ��� ���� �� ������ � ��)��������� �������� �� � ��������[ � ���� �������� :������%�� �� ��Æ����# < �� " ����������[ � ���� ��������� � ���#�#�%��[ �� �"����� �� ��� ��������������%�� ������� "��#�#� � ���� �� "�� " �� ������� ��� ������ � - ���C����� � ��� ������� ��� � ���� ���� ��� ���%��"���� ������� ��� ����� �� ������ %� ��" ��������� � G�� �(� �"� "� ������# � �)2 �� �� �������� ������"�� ������ ���� �� ���� #���� �� )�� �� "��#�#�� �����"� + � � �� "��� ������������%�� ��������"� � ���� ���"� ���"� �)2 ��� � c� � ��� ����� " ����"����� �� � ���� �ÇÇ �� c)2 ������ � + " �����#������ � ��� ���"� �)2 ���� /�� ?B ����� %�� " ��(������� �)2 �� � �c)2 ������ �� " � 3" �� ��� �� � � ��� $�������� #�����%��� "��� �� -��� %�� " ��� �������� ��������� ���� �������� Z��� � �� � K�#"� � �

È ��É ����º �� ��¹¹Ã� � ��� ������� -� �� )�� �� ��������� �� "��#�#�� ��� "�� ���%����� ��������� ��������� ���� � ������� + �� " ������ �� �"������� �""���� + ��� ���" �� � ���� �� )�� �� ��� "��#�#�� � ����� ����������� ��������� �\� "��#�#� ���� � ��) ��� ���� �( ����� + ���� ��� ��� � �"�������� + ���� ��� ��� �� ���!������ � -� ��� ������ ��� "� �"�� $��%���� + ���� ���� �� ��������� �� ���� ���( �(� �"�� �� ������ ��� ' Z������� 0- ��/�� � G��� Z������� 0- ��� �� ����%�� $�� �""� 59;A8 � ��� ������ )��� ����� "� ��� ���� � �"���������� �"��� � /�� � ��� ��"�������� �� � "��#�#� � ��� "�� ���"������� � )��%���� �� ¯ smÊ ��� �� ��� �"� ��,��� ��� �� ���!������� 59B68 � K ��� �*� "�� ������ "��#�#�� � �������� ����� ��� �� ���!������ + ��� "� �"��������� �""� ������� ��� "� �� ���!������ � ���� � �"�������� � d ��� ���� ��� $��� "�� ��� ����� � �"������������"����� �� �,��� �� ��������������� ������b� � ��� !#�� "� ��&�� �� "��#�#� �\�� $��� �� "��#�#� �(������ + ��"� �.�� ������� :���<����� � G��� ��"� �" ���� ���������� "�� $����� ���#�� . ���� + ���$� �� ���2 ��� + �����#����� + ���������� �� ��� %��"���� ���� �� ������ ��� �������� %� ��" ������"� %���� "� %��"��� �� ��� � �"�������� ���� ��)"��� "� ���$��� �� ��� ���"������� � ����� � ������ �� ��� ���� ��� ���Ë ÌÍÎÏÐÑ ÒÏÓÏÐÔ Õ ÐÖÓ×ÏÐØ ÐÍÏ ÙÚ Õ ÐÚ ÐÍÔÐÛ

Page 13: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

>����1 ������"� � ��� ��������� �� ������ �� ���)�"��� � S ""� � ��� ���� �������� ��� "�� %��"���� � ���#�#�%��� ��"��#�#� + ��� �� ���������� ��� ��Æ����# � ������� � ���� ���������� + ��� ��� ���"������� ����� :Üio olf gee <�� ����"���� �"�#� ��� �� ���)"� � ��^ ��"� + ��� �� ��������� ��� $���"� ������� �� ��� + ��� �� ���������� �� �*���� ��� ���"�������� ��������� + � � �\�� $��� �� ������ �� �������J���)�"��� ������� �� "��#�#�� ��� �����b��� ��, ������ ������( �� ������ '

[ "�� #����� ������ ' U������ + ��)�" + � + �ÇÇ + R ����" K���� + ����[ "�� ������ �� ���!%��� ' Z%" + G���Z����� + G��" + GVG[ "�� ������ �� Ý�) ' V� " + Þ " + ����Z�����[ ��� ������ H ������ I ' /�� + c)2 ������ � + S�"��# + S�����"[ ��� ������ ������ ' G����"[ ��� ������ � ����� � ' Z �""ß�"Æ + G��"�# + -��� + Z��� � + 0- + S�,�" + V��Æ�""[ �� � ����) "�� $����� ������ ' G&���� + �à[ ��� c��� ' 0 �����& + c1 +c� � ��� ��á��� ���� ����� "���� %� ��" & � ��� �� � ��2 ������ :����%�� ���%����� ���< �� � ������ �"�� ������� �d ��� ���� � ��� %�� "� ������ � ��� "��#�#� ������ ����� + ��"� �.�� ���� ���"��� �� ������ � �������� ����"�� ��( J%���1� ��� �� � '[ U������ 3R + U������ AA + U������ ?;[ /��=6 ����� � �/�� ?B

�� � � �� �&�� � �"�� ������ '[ ���� 9�; + ���� 9�9+ ���+ ���� 9�>�� ������� %� ���� ���"����� � ��� $���� ���"���� "�.��� "��#�#� �� �������"��� %���� ��""�.�� ��� ������� ������ ���"� ���������� ' G����" ���� � �� ß��) � G����" ��� ��������� �� $��� ������ + ��� "� �����#� " ��)2 ��ß��) � G����" c)2 �� � �� ��� ��� �����$������ �� �" $����� �������� 4�"��� � ��� %�� K��"���J3 ����� ���������� "� ������ � - ����"����� ��� ���� ���������� ��� ����� ���#������ + �� �������"��� %���� �""� �� �"�(�!�"� "��#�#� ������" ���� "� ����� �À " ��� ���� ��������� ��� �� ����)�"��� ���������� �� ����#��� ���������( ������ � ������ ���� ����� � ������� "��#�#�� � -� ���( �� � ���� �� ����� + & �� ���� �� ��� �� ������ +� ��� ������� �"��� �

â����� ¿�¾ ���� �� �������� ã ' d��� ��������� ����� ���� ��� $� �""� �� "��#�#�� �"#����� �%��� ��.� ������ �� ������ �����$������� ��( ������( � ��)��������� ������� ������� ��� � -� �Á�� H�"#����� �%��I�"� ��� � ������� �� 2 �� "� "��#�#� G��"�# %�� ��� �� ������ � ��)��������� ���� �"��� �(��""� ���� "� ���"���.���� ��� ��"������ ��� �� $���"��� ��� + ���$ �� ���( �� #������ ����������� + " ��������� � ��"#����� �� � -� $� �""���� "��#�#�� � � �����$� �� ��� ��� ��� �� ������� � ��)��������� ����� %�� "��� ���"� � ��(������� ����� ��� ����� "� ������ �� ��������� � ��(�"������ "� �����Á"� � ��(������� �� "� #������ � ���� � W������ "� $� �""� �)2 ���� "� $� �""� $���������""� � - ����� "� �Á�� �"#����� �%�� ����� ��� ����� ����( � d��� �� �� "� ����������� "��#�#�� %�� ��"��"��� �"��Á� %�� �� "��#�#�� %�� ���"����� � ������ �� � ��� ������ ��� �"#����� �� ������ ��&"� �)2 �� + ��� %���� �� ��#���� �� ��� � �"����� �� ������ #�����"���� ��� ���������� �� ��������� �"�� �� �)2 �� �� �� ������ ��� �������� ���) ����� %�� � ����� ��� "��� �������� �ä ����� � ��É��¸�¹��½� ��� �������� ¿½�¹��½����� -�� "��#�#�� $���������"� ��� ������ ��( ��������� ��)��������� + �� � ������ ��#� 9+ ���� �� ����� �� ��� �*���� :#������ � ���� + �&��#� �� �(��������<%�� �� "� �����"����� �� �� ������� � T"���� �� V�������� ����"���� ���� HU��������" G��#�� ��# ���Z�$�å��� S�#�������#I 5A 98 %�� H" ��)��������� $���������""� ��� �� ����" �������� � ��� "� ���� � �������� ��� ���#�� �I� �� � ���� �� ��� ��� �""����� ��� ��� ���"�� $���������"� �� ������������� � V�#��� ����HÝ �& U��������" G��#�� � # 0 ������I 5=A8 ������� ����� ��#� �������� �� ������ �� "� ���#�� ����� ���"���� � G "�� %�� "� �� ��"����� ������� "� ���#�� ����� ���"���� ����� �� $���� ���� "� � ����) �"����� �� ����� ��� ���"�� � -� ���#�� ����� $���������""� �,�� ��� "�� $�������� � ������ ��� ������ �� ������������� "� �� �������� �� ���"�� � d����# ���� H/ W������ ������ �� G�����# �� �$ / 3 G��#�� ��#I 59978

Page 14: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

B������ ��� "���� �� ���%����� ���( "��� � ��� "� ����"��� � ��� �� ���#�� �� � �3���""�#���� /���!���""� "�%��""� "�� ��, ������ "��#�#�� $���������"� ��� ������ �

wxyzxz{| æ~yç��~yy{}|-�� "��#�#�� $���������"� � ������ ���� �"����!�� ��� "�� ���( �������� �������� '9� �&� � �����%�� ��� �� �&�� �%�� ���-� ��� ��� ������� ����%�� %���� "� �����Á"� ��� �&� �� ���� �,����� � Z� "� �&��#� ��� �����%�� + �� �����Á"�� "��� �� � ��� �� "� �� ��"����� �� ���#�� � � Z� "� �&��#� ��� �&�� �%�� + ��"� �.�� ��� �,������ ������ " ��(������� �� ���#�� � � 4 ��� "� ����� �� �&��#� �����%�� + ���"� "�� ���#�� �� �������� ���

��� �� "� ����!������ �� �&� �� ���� �������� �� � ������� � ��(������ � - �������� ��� �� #������� " ��)������ �������� �� �&� �� " ��(������� %����� ��$���� ��� ���#�� �� 2����� :�� ��� ����� ���� "� ) ������"���< �� ���� ������ ��� "� ������ "��� �� �&� �� �� " ��"#����� � �� ����!������ �� �&� �� � 4 ��� "� ������� �&��#� �&�� �%�� + ���� "�� ���#�� �� �&���( �%�� ��� �������� + i ¡l¡ ���� ������ "� #�� ���� ��"��#�#� + � ������ ���� �(������ + & �� ���� ��� ���#�� �� $��( �� � ���� �� ��� ��� �&� �� �����b�����"��� ��� ������� �� ��"��" � c� �)����� ���� "� ��� ��� ��� �� ����� �������#���� ��� ���$����)"� ������ "� ���(�� � ��� ��� #����� "�) ���� ���� ��� ���#��� ������� �7 � ��� �� � ���-� ������������%�� �� ������ � ��� "��#�#� $���������" ��� " ��)����� �� �����Á"� �(�"����� �� " ��(��������� �� " ����� � ���� �� ���#�� � � 3" � �& � ��� �� ���!������ ��&��%�� � ���� 1��� � ���� :���� ��, ��� �� ) ���< � - ������ �� ��"��" ��� ��#� ���� � ���� $������� �� ���!� ��� "� ����"��� � ������������������� �� ������� �"����%��� �� ���� � � �����$ + �� � "�� ��)"���( + �� � ������ �� ��������������� ��� �

¶ " �������� ���� � ��� �������� �����"�� " ���������� ��� �� �, ������ ��� ���!������� ��&��%����� ��"���� � ����� ������������%�� �����b�� �� ����( � ��� "� ������#�� � ����"������ :��� ��#� ���� � ����$������� < '[ ���"������ � ������ ' "�� ��#� ���� ��� $�������� ���� ���"��� ��� "��� �����#� ���� "� ����� �� "�$������� � -� �����%����� ��� %�� + ��� %� ��" & � ��� �,��� �� ) ��� + " ����"������ ���� ���� � ������ �[ ���"������ �������� ' "�� ��#� ���� ���� ���"��� ���� "� ����� �� "� $������� ���� ��� $��� � ��� ������

"��� ��� ��� � �"�� + ���� ���%�� $��� %� ��"� ���� ���"���� �-�� "��#�#�� $���������"� ���� � �"������ �� #�����" " ����"������ �������� � c� �)����� �"��� "�� ����� $� �""����������� '

[ ��� �&� � �����%�� ��� ' 0 ������ + �"��� + V��Æ�""[ � ��� �&� � �����%�� ��� ' 0- :�/0- �� Z0-<[ � ��� �&� � �&�� �%�� ��� ' -��� + Z��� � + S�"��#3" & � � �� � ��(� �"�� �� "��#�#� ��� �&� � �&�� �%�� ��� � V�� �� "� ��������� �� -��� � ��� ��������(VS-Gè 596>8 � d ��� ���� "�� "��#�#�� � ���� � ������ ���������� ��� ������� ����������� �� � ������ ����578 � ��� -��� �� ���� 5>?8 � ��� �/0- �

â�� � ��� ��¸� ã ������ "� ����� �� 59B>8 HÝ �& �� ��� ���� $��������" "��#��#��I ��� �(�#��� ���� "� ������À '[ ��� "��#�#�� ��2 ������� �� � -���JZ��� � �� 0- ��� ������� ��( ��, ������� ��#��� �� � �ÇÇ�� ���� + �� ��� �� ���"��� D "���� �� ������� ���� ���2 ���� ������� �� � "� ������� "�� ��, �������"����� �� ��,������ ��� ��� ��� ���%��� Déêëìí îïð ñò óôïí õö÷ëïïëñø Û

Page 15: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

@

[ ��� "��#�#�� �"�� ������� �� � V���"" �� ����� 0 �����& �(��� ��� "��� �&�� �� � ���� "� �� �.����� �� ��������� ��� "� �� )�� � ������"�� ��( ���$������� �� ����"����� D[ ��� ���"�������� #���� ��)"�� ��� ��� ���"����� �� ���� %���������� ��� ���"����� D[ ��� �������� ��� ���� ��� ����"� �� ��� ���"�������� �� �����"�� +�� � ������� � �� �� ���#�� ���� "�� ������ �� � "��� "��#�#� �� �����"������ �� " ��2 ��� �� ��� �������.������ ���� �� �R � ���� ��� $���� ��� �� �"�� � ��� "�� � �"�&���� � -��� ���#� ����� ��������"� ��� ���!������ "� ���� ����� �%�� ' �����#�� ��� �� ��������� + %����� ��) ����� ���� "�� ������� �� ��������� ������ ���� ���� �� $��� ���� ���� �� ���� � G "������� �� �� ���� ��� + ��� %���1� ��������� ������ + ����&� � ����"&���"�� ��������"�� �����%��� �� �� ���� ���� ��� �� ���� �

·¸���»��� ��� �������� ¿½�¹��½����� -�� �����%��� %�� ������� ���������� �� �������� "�� ��#� ������ T�)���" 5@B8< + �� Ý��"�� 59B>8 + �� Z������ :596B8< ����� %�� "�� ��� �������� ����������� ���� "�� "����� ����,����� + �� �������"��� ��""� �� �/0-ù ���¸ � ��ú ¹�¹��º ' \�� �����%�� �������� ��� %�� ����� ������ � ���� ��� "�� � ��$�� ����� �� � ���� �� ����������� � ��(������� ��� "��#�#�� $���������"� � ��� ��#� ��� ���� ��� ��� ���� - ��� %�� ������� ������������� ���� " ��""� ������ �� "� ����� ������� � ���� ���� ���%�� � �������� ��� ���� � ��$�� ����� � c� �""��������� + ������� �����"� ��� + �� �� ����� ����� "���� ��� � G��� ��"� "� ��������� ��� " �� �"�������� ��� "��#�#��$���������"� � ��� � �������� �� "�� ����"���� ��� ���#� ��������� ������ ��� � ���� ���� ��� "� %��"��� ������ ������� %�� ��� "�� � �"��������� ��� ������%��� �� T�û � d ��� ���� ��� ��#� ��� ��� ������ ���"��� ���"� ����� ���)�)"� ��� �� $��� %�� "�� � �"��������� �� "��#�#�� $���������"� $���������� ��� ) ���"�� ������������ :hse ol lo< � ������ $���� � ����� �� ���#�� ��� %� ��" ���"��� �� ���������� � c� ��� ) ���"��� ������������ ������� ���"� ��� ���� ����������� �� � ��� ����"� �� ��� �� � ���� �� � ������������#� � 4��"�� "� ��(�� ����� ����������� ��� � ��� ���� �� ��"� �� ����#� �&�� �%�� ��� ���� "� ) ���"� � ������������ �\� ����� ��#� ��� � ��� ���"��� ��� "�� ������%��� �� �� ��"����� ���� ��� ������� �)�������� � K ���%�� �"������� � �"��������� � �������� ���� �������� �� ����.� ���� :�uhl�tsml< ���� ��� ������ �)����������� �(������� :��� �"�� ��������� �3ß ���� üknh °p ýi� l< + ���� �� ���� ����$ ���� ��� ��������������� ������� ������ + ��� ��#� ��� ��� ����� ������� � ������ "��#�� �� � E�� � ���.�� ���� �� ��� ��$���� ��2 ������� F - ����������� �� "��#�#� ���� "�� � �� #����� ������ )�"�&�� � S� $��� ��� ��$���� ���� ���������� ������#�� #�]�� ���� � 4 ���� ���� "� #������ ���� ���%�� �� � ���� ��� ��������� ������������ � �� #�#� �� �*���� � 4 ������ ���� "� � ����)�"��� ��� "� �� ��"����� ���� �� ����.� ���� � ����� ��� $������� �� ������ �� �� "��#�#� � �� � " �����%���� "� ��Æ����# �� Z\d ' H�� ��"� ���� �������&å����I� 4� ����� �� ��� ��� � ��$�� ����� + "�� ��� ����� �������� �� ���� :���� �3ß < �� )��""����� ������ "� ������� � ��(������� �� ���� ������� �� %�� � � �� �� ��� #���� � � ������� � ��^ ������ �� ! " ��� �������� ��þº¹���É��� ���½�½¾�� ' \� ���(�� � ��#� ��� ������ ������ "�� "��#�#�� $���������"� ��������� ��"� ������ �� ����� ��� �(�����)"�� � -�� ������%��� ������ ���"����� �� ��)�� ��� ������ =; �������� ���� �#� � ���� �(�����)"� �� ���#�� � ����#� ���� "� ) ���"� � ������������ � ����� � �#� � ������ ����#�#�����%�� �� � ���� �� ��� � ���� ��� �""� � )��%���� "� �� ��"����� :�� " ����������� �� ����.�����<�� ��������� " ����� �� ��� � 4� �"�� ��� � �#�� � �������� ��� $���� ��� ������ �� ' �""�� � �������� �����) ����� �� )�)"�����%��� ��� ������ ����#��� ���� " �� �#� � Z��� �""�� ������� ��� �������� � ���� ������ ��" ���������� ��� + ���� �""�� �� $������������� %�� ��� ��� ������������ ������ � 4 ������� "��#�#�� �� �Z �""ß�"Æ ���"������� "� � � ������� � - ��(�����)"� ������� ����� ���� ���� #��� + ���� ��� ������ � � T�)���"���� 5@B8 ����%���� �� 9?? 9 %� ��" ����� ���������� �� � ������ ���������� �� � ����� �(�����)"�� ������ �� ���"� � ��� ���"��� ����1 ������ ��� ����� 5@B8 ��� " ���#� ��� ��� ������ ���"��� �

ÿ ��� � ������ ������ ����� �� ���� ���ö÷�ö�ë �� ììë�ðô�ò �ñ � ìöòëñ÷ �ë �ëììñìëï Û

Page 16: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

A����¸½¼º¸�É ����º ' \� ����� ��#� ��� �����"� �� �� ������� � -� ���� ��� "��#�#�� $���������"� ���%��"%��$��� ������� :�� ���"����������< � 3" ��� ��^ ��"� �� "�� �����$���� ���� ��� )�)"�����%��� �(�������� ������� ������� "��#�#�� � ��"� �������� ��������"� ��� �� "� #������ ���� ���%�� �� � ���� %�� �����b�� ���������� ��������������� �� ���!%��� ��� ��"���� � - ����� ��� ��#� ��� �� ���� �� ) �� �� ��������� ����"� ����� �À �" �( ���� ��� �����$���� ���� � + �� ������� � ���� "�� ������ "��#�#�� � 4��� �������� ��� +�� ��������� ��� "��#�#�� �� ����������� � ������$��� :°¯�< %�� $���"����� ��� �����$�á�#� � d ��� ���� �����#� ��� � ���� ��� �� �"��� ��� �� ) � �� �� � ����� ������ ��� ��^ ��"��� ����� "��#�#�� � �������� "����������� #������������ �� � ���� � -� ����)������� � ���� ��� ���2 ���� �� ���� ��� �� �É �É ��½��û��� �� ¼½¸��É ����º ' \�� ����� �����%�� ��� "��� "� ���������� ' "�� "��#�#�� $���������"����� ������� �� )�)"�����%��� + �� ��� ��������� �� ���� ��� ���2 ���� � ������ ��� "�� ��������"�� �"���.$�� ���� ����"��� � ��� � V ������%�� ��� "�� "��#�#�� $���������"� ������� ����� �� "� ��������� ����� �%�� � \��$��� "� "��#�#� �� ���!� �� �� ������&� � ���"��� + �" �� �� )"��� ��� %�� "� ������������ �� )�)"�����%��� ������ ��� � �� ��������� � ��"� � ����#� �� � "� ������� "�� ������)������ �� V��Æ�"" + c)2 ������ �� " ��Z��� � %�� � �������� �� �� )������ )�)"�����%��� � d��� ���� ��� ������ �� ����� �����%�� ����� ��"�)"� ����"� ����� �À ��""��.�� �� ���� ��� ���2 ���� e gtÜgq vln �� ������ ��������� �� �� ���� ��� ���2 ���� � ��������� "�� ��������"�� �"���.$�� �� �� ����"��� � ��� � \� �(� �"� C�#���� ����� ��� �����$���� ���"�������� 74%�� " ��� �� �������� ��� ���2 ���� ��� "�� ���������( �&��� �� �� #������ �� $������� ' Ý ����å � + Þ.Ý ����å�� ����� � \� "��#�#� �� � G&���� � ������ ��� �� ������ $������ �� #���� �� )�� �� )�)"�����%��� &�� ���� ��� �����$��� 74 )���� ��� ßÆ �� )��� ����#��� �� "��#�#� �� �ú ¹���º� � ��¼¼¸��������� ' \�� �����%�� ���������� ��� "�� ��, ������ $��� � �� ���������� ��� "��"��#�#�� $���������"� �� �� "� ���� ��� ��������� �� ��$�� ���%�� ����� �� "� ��^ ��"�� � ������������#� �� ��"�"��#�#�� � S� $��� ����� �����%�� ����� �"������� ��� ���� %�� ����������� ��� � ����� �������� '[ -� ���"� �� ��"��" ����.2 ����� :

λ.��"��"< ��� "� $��� ���� �� �"� :���"� ��� ���( �������������< �� ������ �"�(� � ��� "� ����#� �� ���������� �� ������� � Z� ������������ ��� )��� ������� ���� ���� ���%�� �

[ -� �&���(� ��� "��#�#�� $���������"� ��� ���� �"��#��� �� ��""� �� � �� ���� + �� �������"��� " �������� -����� ��� �� �&���(� ����������� �[ -� ������ � ��)��������� ��� ���� � � ������ � -� �� ���������� �� �� %� ���� ��� ��"��� $���������""� � ������� � ������ �[ -� �&��#� �����%�� �� " ���$������ �� �&� �� ���� ��^ ��"�� ����������� ���� "� ����� �� ��"& ������ ����� ����%�� �[ -�� ������������� ���������� �� � "�� ������������� + "�� ���"�� ���� ����� + �� "� ����.�(����������� ��� ������� ��^ ��"�� �[ -� ) ���"� � ������������ � ��� �����b��� ��� �������� ���$����� ��� " ������������ � ��� ���"������� ���� �����#�� � �

c� � ��� ���� ����� "� �"����� �� ��� �����%��� �� � ��� ������#�� � d ��� ���� ��""��.�� ������� ���������� �� �� ��� ���� " ��"�) ������� � ��� �����#�� ��� ���� "� ����� �À "�� ������� ��^ ��"�� �) �������( ������ ���� � ������� $�� �� ���� ��� "��#�#�� %�� �� )"��� �"�� ������ "�� ��������� � -� ������ �� ��"���$���������""� � ���� ��� �"�� �� �"�(� %�� "�� ��������� �� �"���� "� ��"� ���� � -� �&��� � �� �&� �� �� �ÇÇ � ������ � �������� � -� �&���(� �� Vß0- �� �"��� ��� ����������� ��� ��� )�"���� ���� �¸½���¾��� �� �º���½¼¼�¾��� ' -� �"����� ��� ������)������ �� "��#�#�� $���������"� �,������� ����"� �� �"�� �� � "� ��� ���������$ :) ���"� � ������������ < �� ��� ���� � �������� ����������:��������"� ��� � ��� S ���< �� ��� ����"� � "�� ���"��� �� � �������� ml�kqq lfn �� ��� ���! "�����(�������J � ���� � -�� ����"� �"����%��� �� ���� \��( � ������ ����� ���� ���"���� �� � "� �� ��"����������������""� :0 �Æ�! "�< + #������ �� ������� :�RZ< + � � ���� ����"� �� �� ���������� ��� ��� ������ "��������)������ + � � ��� ������ "�� �"���.$�� �� � 3" ��� ����� "� $��) "���� ��� ����"� � ��� Ý ����å � � 3" �( ���� ���"�� ��������� ��^ ��"��� ������ �� � �"& ������ � ��� "��#�#�� $���������"� �&� �� �� �� "���� ������%��� ��

Page 17: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

=�� ��"����� � S� �������"��� " ��)����� � ���$�� ������ �� �&� �� " ��(������� �� $���"��� ��� "� �]��� � ���� ������� � ��� ml�kqq lf� -�� %��"%��� ����� ������ � ���������� ���� ����#��� :°¯ª< � ���� ��� ��� �� �"��� ������)���� � �� � � ��� "� $��) "���� �� ���Æ�#��# �� )�)"�����%�� + "� ������" ��� "�� ��������� ���� �����#�� ����� � ���� ��� ���2 ���� ��������� �� � �� ������� �� ��������� ����������� � S� � �������" ���������� ��� �� ����"��� � ��� ��� �� �"� ��� � � ������ ���� � ��� "� ����� �� ��� � ��� "��#�#� %��� ��� "� ����"��� � ��� � ����"�������� �� �"�(�� � -� ���� -��� � ��� �"�� ����� � ���� ���� ����� %�� ��"��#�#� $���"��� " ����#� �� "� ��C�( ��� �� � ������ ���� ��� "�� �������� ���������"� :3-cT R 3SÝ Z<� E� ��" ��������#�� �� ��� + �� ��������� ��� �� ����"��� � ��� ���$����)"� � ��� "� �������� �� ���2 ��� ���� �� )"� ���"� ��� ������ ����)"� � ��� "� ����"��� � ��� � ����"�������� � � �������� �� � ��� " ������������#� ��� "��#�#�� �

������¸� �����½� ' 4 ��� ���%�� $� �""� �� "��#�#�� $���������"� �( ���� �� �� )���( ���"����� � V ������.%�� ��� �� � ��� ����� �� �� -��� �� -��-��� � ��� "� $� �""� -��� �� Z������� 0- �� �/0- ���� "�$� �""� 0- � 4��� "�� ���( ��� "���� �� ������� ���� ������� � ���� ��� ������ �� ���!�� ��� ��� � + ���������� � ��� ��� "��#�#�� � G�� ������ �������� "��#�#�� �� � Z��� � ��� �� �� ����� ��� "� ��)�� �� %�� ��) ���� ��� ��� � 3SSS 5>>8 %�� �� �"�� � �� ���"��� 5?;8 � - �������� � ��� �������� �^ ���" �� �� $��� ��� ��� �� ����� �"������� � �"��������� � ���� � � �� ���!������ �� �� #������� "�� ���"������ �� ������ �� ����� "� �� ����)�"��� ���������� � \� �������� ����� �� ��� �� "� �� ������ �����""� � ��� "��#�#� �� �����"�� � ������ "� ����"��� � ��� ���� ��"� �.�� � 3" $������� ����� " ����������� ��� ���� ��� �������� �� ������( �� ��¼½��É ����º �� ¿�¹����º � �����������½� ' K ��� %�� "� �� ��"����� ���� ��� ������� �)�������� ������� ������%�� ���"���� ������ ��� "������ ��� "�� �� ��"������ �� "��#�#�� $���������"� + ���(.�� �� ���� ������2 ���� ���� ���)"�� ��� ��� �"���.$�� � �� ���!%�� � 4� �"�� "�� �� ��"������ ����$� ����������� ��� ) ���������������� ��� ��� �������� ��) "�� � 0 ��� ���� "� ��� �� ���� ���)�"��� + " ������""����� � ���� ��� ���2 ���� ����� ���� �� ��"������ ���� "� �"�� ������� ����� �� ���� �� "�#����" "�)�� � \�� �����""����� � ��� �����������"������� ������ "�#����"� %� ��" $��� �"��� �����""�� ����� + ��"� %�� "� ������)����� ���� )������ �� ������ �4 ������ ���� ��������� )�)"�����%��� �� ���� ��� � ������ ��� ��������� �"���.$�� �� + � ��À ��� $���������"����� �������� �¹½¾¾�¸¹��������½� ' K ��� %�� "�� "��#�#�� $���������"� ������ ����� �� ���� ����� �%�� �"���������������� ���������""�� ��� ����&� �� "�� � ����� �� �"�� ����� ��)"�� � 0 �"�������� ��� ��� �(� �������� � ������� ���2 ���� �� "� ������ ���� ��� � ��� ��, ������� ������� � -�� ����� �(� �"�� �������� ���� ������������ ������� ��� "�� ������� �� "��� ��"���$ ����� ���� ��,������� �[ S�"��# � ��� ���á� ��� "� �� ����� S������� %�� ����� ) ����� � ��� "��#�#� �"��.��������� � ��� "� ���.#�� ����� ��� ��� �%��� � ���� ��"������%��� � G "������� ���"�������� �� ��"������� ��� ��� ���á��������� ��� � 3" � � � ��) ���� "� ����� ������ �� "� ������� � d ��� ���� "� ������� S������� � �� ������"� ��#�� ���� � ��� ����#��� "�� H���������I �� ����� )��� %�� �� ��"����� �� )"]� �"�� ���%���� � ������ ) ������ ������%��� � �� "��#�#� � ��� �� ���� "� H�� ���� ��)"��I� ��� S������� � ��"� "� � � � �� ���� �������� �[ -��-��� ���� �� " �3���� � ��� �� �����"��� ��� "� �� ����� 3"�# ������ �"������� ������ � 3" � ���"���� � ��� ���� � ���� � ��� ��%��� ��� ���#���� ���� � ��� �� �"��� " ����� ��� �ÇÇ ���� �������2 ���� � ��� �����$���� ��( ��������� �� ����� � 3" � ���� �"�� #���� ���"��� ��� �" ��� ��^ ��"� �� ���������� ������)������ � d��� ���� "� �� ����� 3"�# �(���� ���2 ���� �� ��� ������� ��� #����� G0S :�"���������������� � �� �"�&��< �� �������� �[ Z��" "��#�#� �� ����"��� � ��� �� ����� ������"� 64 �� "� �� ����� ��&�.���å��Æ� � ������ ������� �� �� ".-�#�� � 3" � ��� ��, ������� ��� ��� �&��� � �� �&� �� � 3" ��� ������ �� ������ � �� �"� �� �� ����������"����.������� �� ����� ��� �� )�)"�����%��� �"�� ���� � � �������� � ��� "� ������������ �� ��������� ��� 64 � ¶ "� ��, ������ �� RW0- + "��#�#� �� ����������� �� ������ + ��%��" �� ������ � ��2 ����� ���� � ����� �!��

Page 18: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

? ���"�� �� �� ��������� + Z��" ��� �� "��#�#� �� �� ��������� ��� � �/G3 �"�� ���� � -� ���������&�.����� � $�� � ������ " ���� 7;;7 � -� "��#�#� ��� ��������� se lp nskftl " �-� ������� V ��"�%��� � �� �����"��� ��� ��������� ���� �� ����"��� � ��� � ��� -��� �� 0- %���� )"����� ��� ������� � S ""� � ����� $�� � � G�� � ��� �������� ���������� �� ������ ������ U���1 3��# ����/ ""�#�� �� �� -��� %�� ����� ������ �� �� �����"����� ��� ��������� ���� �� ����"��� � ��� �� ��-��� �

������ �� �����" ��� �����%��� + �� �������"��� ��� " ���� ��� �� �����"������� + � ��� �� )"�� � ���� ���� � ���"� $���� �� �� ���"� �� ���#�� ����� � 0 ��� "� $��� %�� ��"� �.�� ��� ������� �� ���"���� ����%�� %�� ���) ����� ���������� ���� �"�� � � �������� %�� "�� � ����� ��#���$� ������� ��� ���"���� �â��� ������� ¿½�¹��½���� ã ' 3" & � ��������"� ��� "� ����( ����� ����� $� �""�� ' � ��� �&� � �&�� �.%�� ��� + � ��� �&� � �����%�� ��� �� ��� �&� � �����%�� ��� � -� ����� ���$����)"� �� �&��#� �����%�� ��������b� ���� �� �"� ��� � ������� ���� ��� "� �"�� #����� �*���� ��� ���#�� �� �(������ %�� ��� "� $���"���� ������$�á�#� :)�)"�����%��� + ������� ���)�"��� + � � �< �� "� "���) �"��� �� ���� � ß��2 ���� ���� �� ����� �� ���# �.��� � "� �Á�� �"�#��� ��� "��#�#�� $���������"� ���� ���� �� )"� �� ���������#� � ��� " ��������� � ��"#����� ���"����%��� + �� �������"��� ��������� ���������� �� ������� � � �������� ���������� "������ �����"�� ���� ������� � c� ���� �"��� � ��� "� $� �""� ��� "��#�#�� $���������"� � ���� �����%�� ��� �&� �� ���� �� ��������������� 0- + ���� �������"���� ��� "� )������ ��� ���"����� �/0- �wxyzxz{ $% & w

c� ������� ��� "� ����� "�� �"� ���� �� ����( �� "��#�#� �/0- �� �����á��� �� ��2 "��#�� �������� �� �����"&���� ��� ���"������� �����""� �' ���½¸�»�� ��� �������� � �� ( ) 0- ��� ������ ������"� ��� �� � "� � lhg ogpq gq l+ � ��À ��� �� + ��" ���������� �� ������� -�U 5A68 � - ���������� -�U ���"����� -��� �� 0- ���� ��� � �"�������� � 0- � ��,��������� -�U �� �"��� ��� ������ %�����.���#�� �� ���( )������� ' Z������� 0- :Z������� 0-< �� �/0-:����#�����" /)������ 0 ������ -��#��#�< � �� �"���#� ������" � ���� ��� ���� ���� �"�� "�� ����"��� � ����������� �� -��� + �� �������"��� "�� )������� �� �� -��� �� -��-��� � Z������� 0- ������� ��� "� )��������#"�.��(���� :S����)��# + K�"" "�)� + G�������� < � Z�� ��� ���� ��� �� ������ ��� ��� �� ���!������ $�� �""��� "��#�#� :��&��( �� ���"��< 59;A8 ���� ������������ �"������� � �"��������� ���� "� �"�� $� ���� �����Z0-Jd� 59;8 � - ��������� �� �/0- 5>@8 + ���� "�� ��������"�� � �"��������� ����������� �� " �3dW3/ + �� ������ ��� ����� � ������� '

[ �/0- 59B@8 :=B.?7< ��� ���� "� ��� ���� � �"�������� �� �"��� �� � ����)"� �� 0- � Z�� �� ����� �� �� ������ �)������� ' *ghlq sfitgo ¢ �nhfgth + gt¥ip l� Z�� � �"�������� ��� ����� ��� "� �� ��"����� -��-��� +�� ������ �)������� --0 6 �� ��� �(������� �� )&��.���� :�3ß < �[ �� ".-�#�� 5?A8 :?;.?A< ����� ��� � �"�������� "�#��� :�sshnhfge g�ol< �� ��&�� �/0- ���"����� ��������""� ������ ������""� :,3d�< + �� T� �^ ���� �� ��� ���� �������� � ��� "�� ���"�������� ����"�� �[ c)2 ������ �� " 59;;8 :?@.< � �"���� " ����������� �� �uhl�tsml+ �,�� �� �� ��"����� ����$ � ��� "�� ������.��"�� ������������� ������� + ��������� "�� ���"�� ���� ����� �� "�� ����������� �� �"����� � ��� " ���#�.�������� "�#����""� + �2 ���� "� ���#�� ����� �"��.��������� :�kohi�h¥flgmvl< �4 ������� �� ��"������ �� �/0- ��� �� "� 2 ��� � ������ ����� � ������ + �� �������"��� ��� �� ��"������ ����� �� ��)�� ��� ������ %�����.���#� ��( �� � �� "�� 596@8 + �� �"�� 5B;8 �� ��0- 5678 �/�2 ���� ���� c)2 ������ �� " ��� �� "��#�#� ����� �� �� �"�(� ���� "� ��&�� $���������"J� � �����$ �����$���"� ��� �) ����)"� �- ���!�� ��� !�!�� � �!��. �����/ ��!�

Page 19: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

9;0 ��������½� �� ·�( ) �/0- ��� ��������"� ��� ���"��� ���� "� ���� ����� �%�� ' �����#�� ��� ����������� � -� ������� ��� �,����� ��� T�& ��������� 5>A8 �� 9??@ ������� ��� � �"�� ���� "�� ����������� +���"�� ������������� �� #������ ���"�� �� U����� � K ��� %� ��" � �& ��� ��� � ������ �� ����)"� �����""� + "� �� )���� ����� �� "� �� )�� � ���������� ��� ���)�)"� ��� ��# ���� �� ������ ��#��!������ �0- ����� �� ������� �� ��������� ���� ��� "� ������ "��#�#� :�&��� � �� �&� �� + ���"&��� �����%��� + ���"�� +�� ��"����� < %�� �� � "�) �������� �(� ��� ����" � ��� " �� �"�������� �� �&��� �� �� ������� �� ��� "� �)�"��� �� ���� � c� � ��� ����� �� � ���"������� "� �� ��"����� c)2 ������ �� " "��. � � + "�� ������������ ������� ��% + G����� + G��( + G/U 1+ �/0- ��)���� � ���""���� "� ����� ���� ��� ����� �%�� � ��� ����#������ ������� �� ��������� � ������������ �������������""�� :�S/ + Uß + 4�����"� + S4U + � � �< �4 ����� � �� ��� ���"�������� H#���� ��)"��I ���"����� �� c)2 ������ �� " ������ "� 2 ��� �� ����������� ��������� ������ �� � 23 4563 ���� "� �&������������� �� ���%��� �������� + 7898� �� ���������� -:ßSÞ ����V� " �� ; <� 498=>? @ � ��� ���������� �� ������������� ��� ��� � c� ��������� � � ��� �����"�� ���� "� ������#���� ��)"�� %�� ��������� ��� ���"�������� :�� � 23 4563 59;78< ���� ���"�� �� "��#�#� � �� �"�������� :�"���%� ��� �����"� ��� c)2 ������ �� " ������������ ���� "� �� ��� �� ��� ��������� 599A8< + �� %�� ��� ) �� ��#�� �-� ���$������ 3�UG :°phlfpghispgo *spr lflp tl sp Akpthispgo B fsq fg�� ipq< ��#����� ������ ���% ��� ����� � ������� �����""� �� ���#�� ����� C ��� ��� ����� "� ���� �� ����� 2 ���� �À "� "��#�#� � �� �"����������� "�)�� � ���%�� ����� ��� �%��� � ���"����� c)2 ������ �� " ��� ��� �� � ��"� �� ���� ��� $���� ��� ����%� �c)2 ������ �� " ��� �� )�� "��#�#� + ��� ���"� ��� %�� �� ) ��� ���#�� ���� ������ " ����"���� �� " ���.������� �

G�� ������ �� �� ��������� %�� ���� � �� � ����"�������� �� �����"�� %�� ���"����� �/0- �� %�� � ��� ��������� � ��� �(� �"� "�� ����"� D�E4F ���� "�� ���"�������� !��������� � 3" �( ���� ���)�)"� ��� ��� ���"���������������� ��( ����������� ����"��� ��� ���� �� "��#�#� ��� �""�� ������� ��������� � - ���#� �������� �� ��"��59B>8 ��� "� ����� �� ���%�� �� ������� �� "��#�#� �� ������ ��� ��������� �� ����� 2 ����!� �� #����� ����������� $��"����� � -� ������������ �� �� � / ������# 5968 �(�"�%���� �� ��� ���������� ��� H) ���I � ����"������ "��#�#� $���������" ����� ��� �(� ������� ���� S�"��# �� � ��� ���� "�� ����� � ��) ����� �� ��2 �� �G ��|{y�x��~y H{| ��xIx�J

�� ������� ���� "� ������������ � ���� ��"������ �� �� ������( ��� ����� �� ������ � ��������� "�"��#�� "���� �� �����%��� $�� �"��� ������� ��� ���� "� )�� �� ������ "� ���#�� ����� $���������""� �&� ���"�� $���"� ��� �������)"� ��� �� �� )�� �"�� � � ������ �� ���#�� ���� ����%�� ����#����� ������� ������� ��� �� �������� �� � ���� �·½¾¼�����½� c� �� ���� "�� ������%��� �� �� ��"����� �� 0- ��� ���( ������( ' ��0- ������" ���"������� "� ����� �� " ������� 56;8 %�� �� ��"��� 0- ���� � �� �� ������" �� �� �"�� ������ �� �� ��"������ �c)2 ������ �� " ���� "� �"���.$�� � �dSß � -�� ������ �� � ����)�"��� �� � �������� ���)�"��� ������� ��2 �������� " ��� �%�� �� ��0- ���� "� ����� �À " ��� ���������� ��� �� ��"����� �^ ���� ���� � �� �"��� �� � ������ )"��� �� ���� ������ � 3" ��� ����������� �� ������ " ���# �������� �� � ��$�� ����� ��� � ���� ���� "� �������� ��� ����������� ������� �� � ������ ���� ��( ���"������ �� "� �� ��"����� �� � � K��� �*� "����������� �� !������ ����� �������� � � �� �� �� ���������� ��� �(�����)"�� ������ �� � -� � ����)�"��� ���#����� ��� #������� ��� � %����� ���������� ��� �����""� �� ��"����� � G�� ������ ��0- ���� ����� ���&��� � �� ���"�� ��, ����� �� ��� ������� �/0- � ����� ���.��������������� � �� $��� %�� � ���������� ����" ����������� �� �� ".-�#�� �� c)2 ������ �� " %�� ��� �� $��� "� ��$������ �����""� � ��� "� $� �""� �/0- � G��������"��� "�� ���������� �� � ����)�"��� �� � �������� ���)�"��� ���� ��""� �� ��������������� + ���� ����� ������������� W����X" 0 ����"����� "� ���"������� � ��� �� ��"����� c)2 ������ �� " � ��� "� �"���.$�� � �dSß � d�������� ������ "� ������" �� ���� ��� K���� G�#��� ��� "� �� ��"����� �� 0- ���� �dSß � c� �������� ���

K ���� �!�����L��� ���L ����M �� N��� ��!�

Page 20: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

99��� ��� ���� ������� ������ ��O�� �� �� ��"����� c ��/0 �- + �� ����)"� c)2 ������ �� " + ���������� ����(�����)"�� �dSß � G��� ������� ����� �� ����)�"��� c ��/0 �- ����"��� � + ���� $�� � � ��� eght¥ + ��� �����""�)������ �� �� ��"����� c)2 ������ �� " � ��� ����� �"���.$�� � � - ��������� ��� ���� ���� ��,������ �� ��0- �c� ������� ���� �� ����)"� ���� c)2 ������ �� " �� �� $���"���� " �������� ���)�"��� �� "��#�#� %����� � ������� �^ ������ �Pþ�����½�� �� ¹½¾¼�����½� ��¸� ( ) c� ����� ��� "�� $���"���� � ��(�������� �� "��#�#� c)2 �������� " ��� �����$�� ������ �� ���#�� �� ����� %�� " �������� �� ������� c)2 ������ �� " �� � "��#�#� ��) "�� ��� �� ��"����� � G��� ��"� ����� ������( ���� �(� ���� �-� ��� ��� ������" ��� �� �� ��"����� �� ��&�� �� "��#�#� Z��" � 3" � ��� ���"��� ���� "� ����� �� ���2 ��S4 3�/ ÊQ � ��� " ��(������� �� "��#�#� Z��" � �� ������&� � � � �� �� � ��2 ����� �� ������ � � ��(������� + "�����"�������� "� ��"�� �� $�������� + "�� �&� �� ���� ����� �� �� �&��� � �� ���"�� � �� �� ��"����� �����$�� ��� ���#�� � Z��" �� ���#�� � c)2 ������ �� " �-�� ���( ������( �������� ���������� ��� �(�������� �� "��#�#� � -� ��� ���� ����)"�� "� ������ �� ������.���� �� �"����� � � ������� � ��� "� ���#�� ����� �)2 �� �"����%�� �� �������� "� msRptgnhipq ���� ������������������� � ����� �(������� + ��� �"�� <6<�=D� + ��� ������� ���"���� � ��� �2 ����� "� � ���������� �)2 �� �� "��.#�#� � -� ���(�� � �(������� �������� "� ���#�� ����� $���������""� ����.����""�"� � S ""� ������ ��� ������(�,������ ���� ����� ���� ���� ��������� U���& ��� "� �� ��"����� <�D �E�4S7� � ��� �� ���� ���� ��� �����""�� �"�������� �"�� �� �"� �� ���!���� ��� �������( ������ �� ���#�� ����� ���������� �� �/0- �� � "��h¥flgmn + "� ������ ������ �� "� � ���������� �� $�� ������ �4 ��� ��� ����� ��� "� �������� ��� ����"� �� �� ��"����� � �c)2 ������ �� " ��� ��� ���� ��������)"� + �����������"���� ��� <�D�TU %�� ��� ���%�� $��� ���"��� �V���¸½¼º¸�É ����º K ��� %�� "� � ����)�"��� �� ��0- ���� �� #����� ������ #������� ��� "� "��#�#� ��) "� � +��� ������� ���)�"��� ���� ��� )�)"�����%��� � ��������� ��� �����$��� �� $�������� �(������ :r sfliqp r kpthispiphlfr gtl �� AA °< � - ������$�á�#� �� 0- ���� � "�� $��� � ����� �"������� ������������%��� �� �*���� �� �������"����� ������ �� "� #������ � ���� �� �� �����#�J����� �� ��"���� � - ������$��� ���� � � �c)2 ������ �� " ���.������ "�� � �� ��^ ��"��� � ��"� ����� ���� ���� $��� �����%�� � ��� ����#��� ��� )�)"�����%��� � �� "��#�#��/0- � c� �������� ��� ���( ������( ������� � -� ��� ��� ��� " �� )��%�� ��� ���� $�� � �� )�)"�����%�� ��hse ol lo c)2 ������ �� " � �� ������" � ��� ���"��� ���� �"� ��� ��� �" �� ����.0 ��� S) �� � ��� � )��%�� ����������� "� �� ��"����� �� " ����"������ �� ���� c)2 ������ �� " ���� ��� ���"������� � D ��""�.�� "� � ������� "������� ���"��� � ��"� $���"��� " ��������� �� e okq ip �� �� "��#�#� �� ������ � -� ���(�� � ������" ������� $������ ���%��� �� $�á�� �*�� + ���� �� � ���� �� ��� �� �&��#� %�� �� "� #������ � ���� + c)2 ������ �� " �������� � G��� ��"� ���� ����� ��!�� ���� T��#���� V ���& �� °¯� :°phlfr gtl ¯ lntfie hisp �gpqkgq l< ����� "�� ���"�� �)2 ��� ��� ���( "��#�#�� � ¶ ������ � ��� !����� �� ����������� �� �"����� + �� ���������� ��������� "���"����� ��#"�)����� �� �������� "�� tgo o�gtÜ ����� "�� ���( "��#�#�� � c� ������ ����� ���������� ��� �����$���#�����%�� ���� � ��� �� ���#�� � c)2 ������ �� " ������� %�� "�� �)2 ��� �������� "�� ����� ���� ������!��� �� c)2 ������ �� " �P�� �¸½���¾��� �� ¼¸½�¸�¾¾���½� �� � ��#��"� ������� ��� + "�� ���������� ��� "�� ���������. ���� �� ���#�� ����� � ��� "�� "��#�#�� $���������"� �&� �� �����%�� ��� � �"& ������ ���� ����%��� ������ ��� "�#��� � -�� ������( %�� ���� ���������� ��C����� ��� ���� � c� �� �������� �� ������ ���( ������ ��� "� ������������ � ��� ��������� ��� �� �"�� � -� ��� ��� ������" ����� " ����"������� �� " �����" 8<�4T 58� ��� "� ������������ � ��� °¯ª :°phlq fghlm ¯ l lose� lph ªp ifsp� lph< � ��� c)2 ������ �� " � �� ������" ��������������"� ��� ���"��� ��� / "�(����� 4��Æ��� �� U������� 4 �""�� ���� � ��������� ��������� �� ���������������#�� � ��� c)2 ������ �� " + ��� �"� c����� + ������������ "� ������ �� ���2 �� + " ����"������� � ��� ������� �����.���� �� "������ ���� "� �� ��"����� + "� ����#����� ���� "�� ������� �� ����#�� ��� ����"� ���������� �� � "��

ËWîòX ô÷�òòëY ëòð �ë Z[Xëì�ííëY ëòð \òðë÷ö�ðô] ^�÷öò� íñ� ìô�_ í�ñ÷ ìö ��ò�ëíðô�ò � `a�ëòðï �öòï �ëï Y�ò�ëï X ô÷ðñëìï Û

Page 21: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

97��� �������� �� �� ��"����� �� "� #������ �� ������� � -� ���( �� � ������" �������� � ���������� "� ������.�������� �&�� �%�� �� �&� �� � ��� 0- � - ���$�� ����� �� �&��#� ����� �� "� �� ��"����� �� ��^ � ��� ���� "������ �� � �"& ������ � ���� ����%�� ����� ���� �(���� ��� "�� �&� �� ��� ��"���� " ��(������� � S� �,���" ��%�� ��� ��$�� ����� "��� " �� ������� �� ��"��" ���� � ��� "�� �, ��� �� ) ��� + "�� �������� �� ��"��" �� "�����"�������� ������""�� � ����� ��$�� ����� ��� ���������� � ��� "�� ����"� �� ��� �� � ���� + � ��� ��� � �����������*�� �� � ��� �,������ ��� ����������� �� �&� �� �� �)2 �� � c� ��!��� �"��� ��� �������������� )���� ��� �����$�� ����� �� �&� �� "��� ��( ��"���� � G��� �� ����� ��� ��*� �� ���� ��� �� � ����"���� %� ���� ��$�� �������������� :"�� �&� �� ��� ��!���"�< � �� ������ �� ������������ ��� �����(� ����� �� �&� � ������� � c� ���������� �����" �"#����� � �� T� + �������� � ��� b�6Tcd6Te ���"����� "� � ���� ��� ���"���� � ��� ���#�� "�� �&� ����� ��!���"� �P�������¾���� d���� �(� ������� �� " ������#�� ��� �� �/0- ��� "�� ��( ��������� ������ � �� �� � �����.��#�� ��� ��""���� ��,����� �� �� ���������� �� "��#�#� �� " ��� ���� ������� ��� �����#�� ��� ��( ��, ��������)"��� � 0- �� � ��� ��� "��#�#� ��$�� ���%�� �� ��)"�� � ��������� �� �� �������� ��� �� � ��( $�.���� 0/ZßSW �� ��������� � S���� ��� ���( �(��� �� �" & � �"������� ���"�������� �� ��� �����������#� ����������� H�&� �� �� ���������� �� �������I+ ���� �� � "��#�#� �"��.������# �� �����"��� �)2 ��� �� �.��"�� ���� ����� � 0 - � ��� ����� ������ �� � "��#�#� ������� �� �� )���( ����� ���� � ��"#����� �%�� +�� �� ��"����� + �� �&��� �� �� ������( + ��� � 3" ���� ����b� ���� ����� �� ����( ����������� � ��� � ������� ���.��� "���� �������!%��� + ���� �������"���� ��� �� ���� ���%��� + ��&��%�� �� "��#�����%�� � K��� �*� �" � ��� ���������#�� �� $�� ����� � �� ������ � ��� �� ��)"�� ��#������ � S�!� �" � ��� $���� " ��)2 �� � �����.�����������#��� � �����#���� ���� ��� $�� ����� ���"����� "�� ß 3�S ÊÊ �f �g���½� � ��¼¼ ��¹���½�� -� $���"��� �� ��,����� � ����"�������� ��� �� ��� �"� ���� �� ������ � ��� "��.#�#� � c� ������ � ���� ���� � ������ ������ ��� ���"�������� � ����)"�� ��� ����� �� � ������ "�� ��,���� � ������ �&��� �� �� ���!%��� � G��� ��"� �� �������� ��� ���"������� �� hse ol lo � )��%�� � ��� " ��(������� � ���.�"������� " ���������� � ��� ����#����� Ý�) � ����� $�� � �� ��,����� � ��� " ��� ��� �������� �� ������ ��"��#�#� ���� � - ������$�á�#� ���� ���� � �� �� ����� � ��)����� �� ) �� ������ �� � ����)�"��� ���� "� ������À ���� $��������� ��� "�� ���������( �&��� �� � 0 ��� ���� "� � � �� �� �� ������ � ������ $���"� ��� ���.��""�� ��� ���"������� ��� �� �&��� � �������"��� � c� ����� �"��� �� ���"����� "� �� ��"����� c ��/0 �- "������������� � ����"�������� ������� ��� �(�����)"�� ���� �dSß � 4��� ��� ����� ��� " ����"������� !��" � �� ��� �� ������� � ������""����� � -� �]��� �� ���������� � ����"�������� �� ��� ����� �� �"�!�� �

ËËhë�iò� ì�� ôë �ë ì `\ò ]�÷Y öðô�ò ëð �ë ìö ��YYñòô�öðô�ò �öòï ì `îòïëô�òëY ëòð Û

Page 22: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

j k lm nopq r

s � N Pt��P� � ` M u

-� �� ��"����� �� 0- �� �"��� ���� ������""� ��� ���� "� ����� �� "� �� ��"����� ��� "��#�#�� $���������"�%�� ��������� '[ � ��(�"������ "� �����Á"� :���"������� <[ � ��(�"������ "� #������ �� " ���������� ��� :$�� ������< �

c� �������� ��� ��^ ��"��� ���� � ������� "��#�#�� $���������"� �� � V��Æ�"" �� -���JZ��� � � ���������������%��� �� �����$�� ����� �� ���#�� �� � �� ������ � ��(�"������ "� #������ �� " ���������� ��� :λ."�$���#5==8< �� � ��(�"������ "� �����Á"� �� " ��(������� :*sphipkghisp B gnnipq © huol :�GZ< 5?8< � S ""�� ���� �������� ����"� �������� 7 �� "� ����� �� " ������� 56;8 � 4� �"�� �� � 0- ��� �� "��#�#� $��������" � ��� + "� ���������.$���������""� �� "��#�#� ���� ���� ������� ���� ������ � ���������� � �� � ���� ��� ���� �"� ���� "� H)������������ �� �� "I �� T�& ��������� Ê �G "������� �� ��"������ �� 0- ��� �� "� 2 ��� ������ "� �"��� ��� ������ =; + � ��� ��������� ��2 ���� ����� ��(��""���� ������( �� � ��$�� ���� � -�� ���������( �,���� ��� � ���� ��� "�� $�� ������ ' ������������������� ����� + ���"&��� � ��� ������ � ��""���� �����"� ��� �� ��""�� ��"���� + �� ��� "�� �"#����� �� �� T� � 4�� ���� �� ��� #������ � ���� ��"� �� ��� ������ �� �""����� ���� ������� + �� ������ ��� �)2 ��� �"�� � ������� �� "�� ����� ����� �"�� ���� � K ��� �*� "�� "��#�#�� ��) "�� ��� ����� �� "��� � �������� � c� � ��� ��� ���� ������� ����� ��� ������( ' ���� ��� ������� �)�������� + ���� ��� ���� )"���� � ����)"�� �� ���� ������ �� �� + ���� �� ���"� ���� )"���� �� )�� ������ � / ���� "�� ���"�� �� ������� �)�������� �����"�#���� �� ����"� ���"� �����#� �� " ���������� ��� �� � "� �/0 5>=8 � ��� ������� "� ���""� ��� $�� ������ ��� ���"�� � ������� ���� " ������ " ���������� ��� �� � "� U/0 57?8 �� ������� �"��� " ���������� ��� � ��� ���( ���"���� ���������� � ��� ��� "��#�#�� ��) "� �� � � �� ��� ���� )"���� �� ������� ���""�� �

-� ��� ���� ������� ���� �""� ������ ��� "�� ���������( ����( ������%��� � ��� "� �� ��"����� �� 0- ����������� ��� " �� � ������� �� "� )�)"�����%�� � ��(������� � ��� ��������� ���( �,������ ��� "�� ���( �� ��"�.����� ��������� ������� �-� ���( �� � ������� �����"��� "� ������" ��� ��0- + �� ��"����� �� 0- ���� � + �� ������� "� � ����)�"����� ����� ������%�� �� "�� #���� �� � ��$�� ���� �)����� ��� "�� �����""�� ������������� ������� �-� ������� � ������� �������� "� �� ��"����� c ��/0 �-è 59;=8 + )��� ��� "� �� ��"����� c)2 ������ �� " ���� ����)"� ���� "� � + � ��� "� �"���.$�� � �dSß � Z�� )�� ��� �� ������ "�� $���"���� � �������� ���)�"��� ��� ������� �dSß � �� ������" + �� ���� ��� K���� G�#��� + ��� �� �� W����X" 0 ����"����� �� " ������� � c� �� ����������� %�� "� ��� ���� ������� �� �� ��"����� D ��� ���� �������� �� " �������� ���)�"��� ���� � ������� "��#�#�� �������������� ���� "� ����� �� W ����X" 0 ����"����� �-� �������� ������� ������� �� " �� �������� �� " ���$�� ����� �� �&� �� "��� �� "� �� ��"����� �Ë �LL � �vw ��� w ���x�!w ��� �y�� ���� �z� ���!�{ ���� �é �LL � �vw ��� w ���x� !�� ��!��� ��

96

Page 23: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

9> |}~����� �� |�����~���� �� ����� �{ç�y���{| H{ ç~�� �}x��~y

-� $� �""� ��� "��#�#�� 0- � ������ ��������� ������������%��� %�� ��C������� "�� ������%��� �� �� ��"����� +�� �������"��� "�� ����� � ����� �������� '[ "� � �"& ������ � ���� ����%�� +[ " ����"������� ������""�[ �� "� ! "���#� �� ���$� �-�� ������ � ����� �) ����� ���� �� �������� ���� �"�� �"����%��� �� ���� "��� "� )�)"�����%�� � ��(������� :fkp�hi� l oi�fgfu< + "� #��������� �� ���� �� " �������� �� "���� � -� )�)"�����%�� � ��(������� �������� "� #������������� � ���� :T�< %�� ��� "�� "� �������������� ��� ��"���� � -� #��������� �� ���� ��,��� $���� ��� ��"�� "������� �� "��#�#� ��) "� � S�!� " �������� �� "���� ��������� ��� ��$�� ������ + ��������"� ��� �� �&��#� + ��� "�����"�������� �(� ������ �

� �¼¸º�������½�� ��� �½��º�� c� ������#�� ��������"� ��� ���( �"����� �� ������� '[ "�� ��"���� � ������� %�� �������� ���� " ������� � ��� �� � ���� :������� + � � �<[ "�� ��"���� ����������� �"�� #������ %� ��� �� '

9� �""����� ���� "� ��� D " ������ ��� ��"���� � ��, ����� �� ������� ��� � ������� � �������� D7 � �""����� ���� "� ��"� D �� ������� "� �� )�� �� ��� ����������� �

�� %�� � ��� �� ���� �� ���� "� ��� ��� ��� �� H������� �� � ��������I �� ���� "� ������ ��� �� H������� ��)"� �� �������I�4 � ��� "� � �"& ������ � ���� ����%�� "�� ���( ��� �"� �������� �� "� $������� �TT ������� � ������ ����������� ' Y öí Xë÷ïô�ò �

� � � � � � �L � � � � ���� � ����� � ��� � ��� � � � �� � � � �� �� �� �� �L � � � ����� � �L � ��� � �� � � �� ���� � �� ���� � ��w� �� � � �LL � N � � N ����� �LL � ��� � �� � � �� � �� � ��w� �� �LL �w ��   �� � ��� � ¡� �LL �� �L �w ��� �¢ �£ � � �� � ��� ���� � �£ �   � ¡�-� $������� �TT ������ ��� ��"��� $���������""� E �� �� ��#� ��� ¤ ��� "�%��" ���� ���"�%�� " ���#� ��� E �

3" & � ��������"� ��� ���( ������%��� 59;?8 � ��� "� �������������� ��� ��"���� ����������� '[ �������������� ���$�� � ' "� �&� �

α: ¥�< ������� ��� �� �� ������ � Z� ��� ��"��� ��� ���� #������ ��� ������� ���� �� �� + �""� ��� �"��� �""���� ���� "� ��� �� � ���� ��� ������� %�� ��� ���"���� � c� ���%�� "� ��"��� ��� �������"�� :�s� lm< �

[ �������������� gm ¥st ' ��� ��$�� ����� �� �&� � :hgq< ��� �2 ����� ��( ��"���� � ����� ��$�� ����� ���������� ���"���� " ��(������� � ��� " ���#��""�� ���� "�� ������������ �� ��� ������ ��¼¼ ��¹���½�� ¼�¸������� �� �½����� S�

λ.��"��" �� ��������� ����� ���"������� �� $������� �� � ���$������� �� ���� ���� � -� "����

� � ����"�%�� %� � �� ������!������ � �� � "�

λ.��"��" ��� "� ���"� ����.2 ����� �� 0- + �� � ��� ���������� ������ "�� $�������� �� � ��� $�������� �� ���� ���� � d��� ���� ���� ��"����� �^ ���� �� 0- � #����� ��� ������� ���������� ��� ������ � ������ ��� $�������� �� �� ��������"���� ���"�������� ����"�� :%���� ���� "�� ��#� ���� �������� ���� ������< � ��� � �"����� "� ���� ������� �� ���� � ���""���� ��� ��� ��������"�� ���� �������� ��� �� ��"������ 0- � -� ��� ��� �� ��"����� �/0- R7 �@.9 � ��, ������� ��� ����� ���� ������� D "� �����%����� ��� �� ����� ��� ��"���� $���������""�� ����� ��������

Page 24: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��� � �� |}��¦§�¨ �� |�����~���� 9B�����"�� ��"��������� " ����"������� �� "� T� � c� �������� ��"� �"�� ���� ��� ���� "� ���"� �)2 �� � �c)2 �������� " %�� ��������� "�� ������� �� � ��� ��"���� $���������""�� �� �� � �� �� ��� "� ��������� �����%��� ���� ���"������� ����"� �

© ���¸��� �� ¾½��¿� -� ! "���#� �� ���$ ��� �� ���� )"�#� �&���( �%�� � �� ������ �� �� �� �� �� ��������� ��"��� �� ��� ������ � ���� ��"��� ���������� � 3" � �����#�� �� �&��� � �� �&� �� �� 0- � -� $������� D�T ��"� ��#� 9> ��!��� �� ! "��� �� �"� � ��� "�� "����� ���� ���( ���$� ' "� ��� ��� ���$ ����� �� "� "���� ��� ����: ª« < + "� ������ ���$ �� � � ��� ��� "���� ��� ���� �� ���� :7 < �� �� %���� :� < �-� ! "���#� �� ���$ ��� " ����%�� �&�� �� ������������ ��� ��"��� � ��� �&� � �� � � �� � �"����������������� �� ������� �� )��� �� � "�� "����� �� "�� ��)��� ���� ����������� ������ �� ��"� �&� �� + "� ! "���#��� ���$� ��� ��� ������ ���� ���� � ��� �� �� ��"����� 0- 599?8 �-�� ������%��� �����""�� � �� ������ �� ���������� �� !"��� ���� �" ��� ���� ��� �� �� )�� � ��� ���������, ������� �� � ���� 597 9+ ?>8 �K ��� %�� �� $������ ��� ������ �� "� �� ��"����� ���� �"� �� !"���#� + �� �"� ��� � ������� ��� " ��(�"�.�������� ��� HR gfpipqnI ' ! "���#� ���� �"�� �� �"���� ��� ���"���� + �� � "� ���� �""� -�� 0 ����#�� ����59;>8 �

V���� ��� - �ip oip ipq �� �"��� "� ���� � ���� �" � ���� ��"��� $���������""� ��� �� ��#� ��� ��� "� ���� �� �����$�� ����� �À "� ���� ���� $�� �" ��� �� �"��� ��� " ���#� ��� ����� � 3" & � ���( �����%������ � ������� '" ��(������� ��� ����"���� �� "� ���""� �� ���� � ��� ��# ����� �

¬ �É ��½��û�� � ��þº¹���½� -� )�)"�����%�� � ��(������� � ���� � �"�������� �� "��#�#�� $���������"� ������� ����#� '[ "� #������ ���� ���%�� �� � ���� :T�< +[ "� ������ � #�����" � ����"������� %�� "��� �� �����#� � ��� ��#� ��� ��� ��"��� $���������""� ���������� �� "� �������� � ���� �����""� $�� ����� + ���� �� " ��(������� �� ���� �� "� ��"��� $���������""� +[ "� #������ ��� �(�������� ' � ��� � ��� ����� ������� + ���"����� ��� �� ����� �������[ " ������$�á�#� ���� ��� $�������� �&��� � :�������J������� + ���<c� �������� ����� )�)"�����%�� �� )�� ������ %��""� %�� ���� "� ������%�� �� #��������� �� ���� �

º�º¸���½� �� ¹½�� -� #��������� �� ���� ���� �"������� ������ ������� �� " ���)�� �� �&���(� �������� ��� ��� " ���$�� ����� �� �&��#� ��� "���� � ������������� �� "��#�#� ��) "� � ��"��.�� � ��� ���� �� "��#�#��� ���� ������ :�� � �< �� �� "��#�#� �� )�� ������ �� � " ����� )"��� � ���� ������ ���""� �� ��� ������ �)������� � 4 ��� �� ������� ��� "�� ������������ ������ ���"���� ��� " ����������� �� ����� ������ �-�� ������ ����� �������� �� "� #��������� �� ���� ������� ��"�� "� ������ ��) "� � ��������� ���� ���������� � " ��""� ������ �� ��#������ �������� "��� ���� � ��� ��� ������� ���""�� �À ���(.�� ���� ��� ������ ���� ���� ��,������� ������ "���������� �� �"�� �� �"�� " ���)�� �� �&���(� 2 ��%� � �)����� ��� "���� � ����������������� ���� �

­����½� �� ����� - �������� �� "���� ��"�� "�� ��, ������ �� ������� � ��� ���#�� � ���� "� )�)"�����%��� ��(������� �� "� �&��� � � ��(�"�������� � Z�"�� "�� ������%��� �� #��������� �� ���� �� ������� ������" � ������� ���������� " �������� � 4 � �"�� ��������� ���� �������� �� � ������ ���� �,������� %� � �� � ��� " ������ ���"&��� �� ���#�� � �� �"�� � \�� ������ �� " �������� �� "���� � ��� ���� ��� ����� �� ����#� ��� �����#�� � �À ���%�� ���"� �(����� �� ����� � ��"�) ������� �

Page 25: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

9@ |}~����� �� |�����~���� �� ����® $~�� �}x��~y I{�| $ ¯ ${& w

��0- ��� �� ���������� � ��� ���"���� �� 0- + ������ �� �� ".-�#�� + ���� �� � �� ���� ������ ' ���$������� 0- ������� ����� ��� $������� � � 3" ������� ��� �� ������" �� ����� �� " ������� 56;8 � 3" � ���"�� ��?7J?6 �� ����#���� �� !"���#� ���� �" � 4����� �" � �� ��� ��� ���!� ��� � 2 ���� ��� � ���� ��� �� �����""���"����.$�� �� �� � -���( � c� ������� ������ " ����"����� �� ��� � ��$�� ����� %�� �� ���� ��� ���"� ����*�� "� �������� ��� �������( ����������� + ��� ����� ��( ���� �������� ��� ������ ��( �� ��"������ � �°±² ±° ³´µ¶·¸¹º¸»¼ ½¾¼¾·¿À´

��0- ��� �� ���������� �� �/0- R7 �@. 9 %�� � ��� ��!�� �� 9?=? �� � �"���� �� 9??;J? 9� 4� ����� ����� "��#�#� �" ��, ��� �� ��� �""����� ������� ��� �� �&��� � �� �&� �� %�� �������� ��� ��$�� ����� � ������ ����� ��� �&��� � �� ���"�� �� �"�� � 3" �� ��,������� ����� ��� "�� ������%��� �� �� ��"����� ���"����� �� ��)�)"�����%�� � ��(������� ��� · �� ���� ������ -� ���� ������� ��� �� � �� ���� ������ �À ��� $������� 0- ��� �������� ���� ���$������� � � �� � � �� ������� ��� �� $�������� "� ��"�� + ������ "�� $�������� "� ��"�� ��0- ���������� ���$�������� #"�)�"�� ���

λ."�$���# 5==8 � -�� �����)"�� "�)��� ��� $�������� "� ��"�� ���� ���� �"��� �� � ��� ����. ����� ����"� �������� � 4 ��� "� ��� �� ���"�������� �� $�������� ����""� ��� ���������� + "�� ������!��������� ��� $�������� ���� �""�� ����� �2 ������ �� � ���� ����� � 3" & � ���( $�á��� �� ������ " ���������� ���:" ����� )"� ��� �����)"�� "�)���< � ���� $������� "� ��"� #"�)�"���� � Z��� �� "�� �2 ���� ���� $�� � � ���� �����.���� "�� ��#������� :�� ����#����� ���< + ���� ���%�� �����)"� "�)�� ������� �� ���� ����� ����"� ������� � -���� ��� ��� �""��� ��� ��������� �� ��������� ��� ����������� � ��� " ������ ��� ��""� �����)"� � -� ������ ���� ��""��� ��� �� �, ����� �� ����� ������ + ��� "� �� )�� �� ���� ����� � ��� ������� � � ������ � ��������"��� ��������� ���� �������� � � ���� ����� �������� ������%�� %�� � ��� ������� � ��� ������ "� ���� ��#������"�� "���) "� �

¸�¼¸º�������½� ��� �½��º�� ß����� "�� ������� ���� ������������ �� ������ ���$�� � � \�� ��"��� ������ �� � ���� + 67 )��� ��� "�� ������������ 67 )��� � � � -�� ��"���� � ������� ���� ��""�� %�� �������� ������� ������ � ���� + �� � "�� ������� + "�� ������������� ��������� + "�� ���������� �� "�� �� )�� C������� �� �"� ��������� � ß����� "�� ������ ������� ���� ���� �� � �� �������� � ���� � ��� ������� ���� �""������&�� �%�� ��� ���� "� ��� �� ��0- � c� ��!��� �� �&� �α

:<7�Á Â< ���� "�%��" ���� �&� � � ���� ��"��� � ������� ��������� �� �������%�� ��� � -� �&� �α

� ���� $������� � �"& ����� � ����� �"��� �������� �� ������ + ��C������ �� �� � ������� ������¸� ¿½�¹��½������� �� �¼¼ ��¹���½�� ß����� "�� �)���������� :E23 < "���� �� �� ���� #"�)�"����� ����0- � -�� �)���������� ��� "���� ���� �"��� ���� ���%�� ��� �� ��� �� �������� �� � ��� ���"�������� �-�� ���"�� $�������� �)������ ���� ��� $�������� #"�)�"�� ���� ��������� ��� + ������ "�� �����)"�� ���������������� "� ����� � ���� $������� ���� ���� ��� �����)"�� #"�)�"�� + ���� ��� ���� ����� + ���� ��� �����)"�� "� ��"�� +���� ��� �����)"�� ������ � ��� ���$ � G�� �(� �"� �� �� ��!��� D �T �� "� ������ �������� ' Y öí Xë÷ïô�ò Ã� � � �L � � �� � � � � �L z�wN � �w� ���!��� � ��� � ��� � � � �� � � � �� �� �� �� �L z�wN � ��� � �L z�wN � ����� � �L � ��� � �� � � �� ���� � �� ���� � ��w� �

-� $������� "� ��"� D�TÄ�2¤ � ������ ��� �����)"� "�)�� ' "� $������� E � G��λ."�$���# �� #"�)�"��� "� $�������"� ��"� '

Page 26: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��Å � |�����~���� Æ��¨ | Ç |��� 9AY öí Xë÷ïô�ò È

� � � � � �L z�wN � � �w� ���!��� � ��� � ��� � � � �� � � � �� �� �� �� �L z�wN � � � ����� � �L z�wN � ��� � �� � � �� ���� � �� ���� � ��w� �� � � � �L � � � � �L z�wN � � ����� � �L � ��� � �� � � �� ���� � �� ���� � ��w� �-�� ��"���� $���������""�� :�� $�� ������< ���� ����������� � ��� ����"� ' :��������� ��� + ����< �À "� ������� ��� �� ��� $�������� #"�)�"�� � �� " ���������� ��� �� ������� %�� �������� "�� ���� ����� ��2 ������ ����� $������� �G��� �� ����� "� �� )�� �� $�������� ���"����� + �� ���"��� ��� ��$�� ����� � ������ ��� ��� $�������� � G���"� ��"��"�� �� ��#���� � ��� ����� � ��)���������� ' E23 <� 463 T É =Ê E23 <� 463 TË =Ê ÌÌÌ =Ê E23 <� 463 T3

=Ê 8 �� � ��� $������� � ���� ����� � ����� ��$�� ����� ��� ��"��"�� �� �&��#� %�� "� �����#� :��������#����� �������< �- ����"������� ������""� � ���� $������� � ���� ����� ���� ��� $�� ����� � -�� ���� ����� ������ ���� ������.��� ���� " ���������� ��� �� "� $�� ����� � - ���� �" ������� ' �8� �D Í D�T 52 << ÎÎ ��������� ��� $�� ��������� " ���������� ��� �������� " ���#� ��� $���������" 52 << �� "� ���� "� $������� D �T ��ϼ��� �� �¸��º G��� ��������� " ���$�� ����� � ������ � ���� $������� + ��0- ��������� ���( ��������������� �&� �� $���������"� � ' =Ê �� ÍÊ � -� �� �"� C���� =Ê ��� "� ������������ $���������" ��)����" � -� ���)"�C���� ÍÊ ��������� �� �&� � $���������" ���� " ������ ��� �������� � G�� �(� �"� "� �&� �

τ1=>. . . =>τn=>τ������� ��� ��� $������� � ������n�- ������������� �� ������������ �� �&� � ÍÊ ���������� �� ! "���#� ��� �� E23 <� 463 �� ������� "� ��#"��������� '

C ` pati : τi expr : τ

C ` function pat1− >. . . function patn− >expr : τ1=>τ2=> . . . τn=>τZ� ��#"� � ����"������� ����"� ��� "� �������� 'C ` expr : τ1=>. . . =>τn=>τ C ` atexpri : τi(1 ≤ i ≤ n)

C ` expr atexpr1 . . . atexprn : τ

��� �� � �� ��� � ���� ��� �)"�#������ + �" ��� ���������� � ������ ����� ��� ��#"� � ����"������� ������""� 'C ` expr : τ1=>. . . =>τn=>τ C ` atexpri : τi (1 ≤ i ≤ k avec k < n)

C ` expr atexpr1 . . . atexprk : τk+1 → · · · → τn → τ

3" � ��"� ��� ����� ���� "� ��� #�����" 'C ` expr : τ1=>τ2

C ` expr : τ1 → τ2����� ��, ������ ����� ������������� $���������"� ��� ������) "� ���� " ����"������� �� "��#�#� � G�� ������ + �""���� �������"���� ��� ���"� � ��� " ����� ������� ��� ���"�������� ����"�� �Ð ��¸��� �� ¾½��¿� -� ! "���#� �� ���$� ������� "� �� ����%�� �� �/0- R7 �@. 9 �� ���������� "� ! "���#� �"��.��"����� � Ñ ìð÷ö�ë �aÒó Óà ÛÔÕ ��w� L z ¢z ¢ ��� L z¢z� � ¢� L z£z ¢ ��� L z£z� � £���� L zÖ z ¢ ��� L zÖ z� � Ö

Z�� � �"�������� ��������� �� ��)�� ���� �" �� ������� "� ������%�� ������� ���� 597 98 �

Page 27: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

9= |}~����� �� |�����~���� �� ��· � ¸�¹���� �¾É���×� -�� Øgf�gq l *so olthsf ���� ��� �"#����� �� �(�"�������� �� ��� :¥ lge < %�� �������������� %�� "�� ��"���� �""����� ������ ���"�� �� ���#�� � � G��� $���"���� ����� �(�"������� "�� T���, ��������� �� ��#"� #�����"� "�� ��"���� � ������� ��� � �������� � ��"� � �� �� �� �� ������ %�� ��� ������ �������� �d ��� ���� " ����%����#� ��� ��"���� � ������� � �� ��*� ' ���� � ������ ��� ����� ���%�� �� ����"� + ����� ��, ������ ��� �� ������� ���%�� � ������� ����� � 4 � �"�� �� ��%��#� �� � �� �� ��� � ����"���� " ��������""��� ��"���� ����� � ��� "�� �&� �� �� )��� �� � "�� ������� � c� ��������� ������� ��� ������� 6 9 �� 6; )���� ��� ��� ��� �� 67 )��� � ��0- �� ���"��� ��� ��� �� � � G��� ��"� �" �� ��� �� ��%��� "�� ��"���� � ��������� "�� � �������� � ��"� � ���"��� ���� "� �*���� � ��(������� 5=8 ���� "� ����� �À "� �&��#� �����%�� #�������" ��)����� � ������� �� �&� �� " ��(������� � ����� ������������ � ����%����#� � ���� ��� ���2 ���� ���������� 59B8 ���������� ��������%��� � ������ ���� � �"�&��� � ��� $���� ����� ����������� ����� ��"���� � ������� ��� �������� ���� ���� �� �� #���� �� )�� �� ��� � ��� ������� �� 2����!��� �� #����������� %� ���� ������������� ������� � ������b�� ��� � ������� �� �� ������ + ��"�� "�� ���"�������� + %� ���� ���"������� �� � ������� ��C�� � ��"� � ���� �"�������� ��� ��� ��^ ���� � - ��(�"������� � ��� $��( �)2 �� � ��� ������ "� ����������� "� � ���� � �������� �"#����� �� + ������� ��� ��#��������� � ���� �� ��� ���"������� + � ���������� ���� �"� ���� ��� ��� ���#����( :577 + 9B8< �� ����� 2 ��� "�� ������� �� ��� �� ���"��� ��� :59@8< � ���&� � �� T� ��� ��� �"� T� ������� � )�#�X� �-�� ������������%��� �� T� ������� � )�#�X� �� ��0- ���� '

[ ���� )"� �� ������� :fssh n lh< #��� ��� "� fkphi� l :� ����"��� ��� "� ��"� � < D[ T� ����������$ ' "�� �)2 ��� �""���� �� ���� ��� ���"���� D[ "� ��� ��� ������ � �� 1���� � ��""� ������ � ��)2 ��� �� ���""�

2n � ���n ≤ 10

��(%��""�� ��� �2 ���� ��� 1���� ��� "�� �)2 ��� �� �"�� #����� ���""� D[ �� Ù�Á�cbÚ88T ��� �,����� � ��� ���%�� 1��� �

¾½����� \� ���#�� � ��0- ��� ������ � �� �"������� !������ � ���%�� !����� ��� ��� �"� ����� �� �� ��."����� � ���%�� ����� � ��� ���� �� ��"�� ������ ��� ��� ������ ������ �� ���#�� � � ���%�� ����� � ��������� ������ H� ���������I �À �""� ����%�� %��""�� ���� ��� ��� �������� ��� ���� ��� ��( ������ ������ + ����� ������ H�(� ��������I �À �""� ����%�� "�� ���"�������� #"�)�"�� %� ��""� ������ ������ �������) "�� ��( ������������ � -�� ��� �������� ���� �� ��� �(�"����� ��� "� ��, ������ ��� ���"�� �� Z������� 0- :59778< ���� �/0- R7 �@. 9 :59B@8< �°±² ±² ÛÜ»Àݺ¸»¼ Þ´µ ¹´·ß»·à¿¼¶´µ

c� ������� �� ����� "�� ����� �� � ��$�� ���� �� " ��� �%�� + %�� ��� ��� �, ������ ��� ��� Z\d6 :0�����"�@=;7;< �� ��� 4��Z������ :0 3GZ W7;;;< + ��� ���� ��� ��� ������������� �"�� �������� ��� �������� -���(:G����� < � - ����� � ���� ��� �� ������� %��" ��� "� �� ��"����� 0- "� �"�� � ��$�� ��� + ��� � ����������" ����"����� �� ��������� ��� �� ��"������ 0- � G��� ��"� �� ���� �""� ���� � ��) ��� "�� ����� �� �� ���������,������ ���� 56;8 � ��� ������� "�� $���� ������� ��� ��� ��� �������� �"�� ������� + ���� � ��2 ����� ��� ������� ������ �"�� �� ��������� � G��� �� �"�!�� " ��������� �� ��� ����� + �� ���"��� "� � � ����."��#�#� � ��� "����, ������ ���"����� �/0- ���� ���"���� "���� �&��� �� �� ���"�� %�� ��, ����� ���¹���� ����� �� ¼ �¸¿½¸¾��¹�

��� ����� ���� ��#���� �� �� ���( ������ � -� ��� ���� ����� �������� ��� ����� �� �"�� %�� �������� �� ��������� �� ���( ������������%��� �� " �� �"�������� � c� � ��� "�� ��#���� �� ����� '[ � ������ $�������� ��� "�� ������� �� �� �"������� ���� ����� ' á4â + ã�� + á 4â�� + á 4âS�[ � ������ $�������� ��� "�� ���b��� ' Ù��85�Á 43S + d623�b�Á[ $���������""�� ��� "�� "����� ' ä89 + b4SD�Ù�T + @�å 45�[ λ

.��"��" ��� ' >62â�8

Page 28: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��Å � |�����~���� Æ��¨ | Ç |��� 9?

[ �(�������� ' ã��æ[ �������� ' b4SD�?8<� + b4SD �?8<�ç-�� !#���� 9�9 �� 9�7 ���� ��""�� ������� ���� 56;8 � ß��� "�� �� �� ������� ������ "� �� � ��� �� ��

knlf �� nunhl� �� $������ ��� �&���� ��� �"������� �(�������� � -�� ����"�� : �� ÂÂ< ����%���� %� ��� ����� �� ��� ��� �,����� �èéêë ìíîïðîñð êë ìòóôõôö ÷ øùúú èéêë ûü ýþÿ � ���è èôêë ìêë��� ìêëüè ìòóôõ ô��è� þ �� ü � �� �� � �� �� ���î� �� �� �ü � ú �� �þ ���� ü � � �í � �� � ø �� � �� ü� �ü � ����í �ü ��� ø �� � �� ü �� ��êî�ô�íñï� �� ú �ø ú �ø ��� ü �� �è��ïíìíñ �ü �� ù �ø ��� þ �þ �� �� ��î�� � � �� � �� � �� �ü � �� ô� � �þ � �þ � �� ü �þ þ � ü ��ì �õîêî � �� �� ú �! ��� ü �� ü ���íë �í �þ � �ü � �� � �ù � "���ô � � �� � þ � ù �� �� � ���î�# ü �ü �� �� �� � � �� � �� �ì �õîûôòí �� ü� $� ��% ù �ù &ú �!' �� �� ��ì �õîûôòí( �þ ü� $����% ù �ø &ú �)' � �� � �� �

* +, - 9�9 [ ���� �� �"�� �� ��0- ��� 0 3GZ-�� ����"���� ��� ������ Z\d6 :ZG/W�< ���� ���� ) ��� � ��� $������ ����� 7 �� > �� %�� ������� ��� � �� ���� "� ��, ������ �� ��������� �� ��� ���( ������� � -�� ����� ZGS���� �� ZGS�C��� 59>>8 " ��� �%������%������ �� ���� ��� �� � ��$�� ����� �

èéêë ìíîïðîñð êë ìòóôõô÷./ ø0�)ú èéêë ûü ýþÿ � ���è èôêë ìêë ��� ìêëüè ìòóôõ ô��è� �� �� � ùú �ü �� �� ���î� � ��� � ø �ø �� �� � ����í ù� �� ��� �ü �� üü � �� ����í �þ � �� � ù� �) üü �� ��� �þêî�ô�íñ ï� þ �ü � �� ú �� þ � �è��ïíìíñ ü� �� ø �� �� � ��� ��î�� � �ü �� ù� �1�� # ññ�ñ� �� ���ô� ü �� �� �� � �ø � � ��ì �õîêî ü �ü� � �þ ù �� ü �þ � ���íë �í � �� üþ �� �� �� ø �� ���þ"���ô � �� � �� ü� ø �� ü����î�# � �� �� ù! �� �ì �õîûôòí �� ��� $ �% � �� &� �)' �� ��ì �õîûôòí( ��� �ü� $ � ��% � �� &ø �ù' � �� �

* +, - 9�7 [ ���� �� �"�� �� ��0- ��� ZG/W�-� ���( �� � ����� �� ����� ������� ��� ��� ���#�� �� �"�� �����%����� �� %�� � �� �� �� ������ "��� �"��������� �� ��������� H���""�I� -� !#��� 9�6 �������� ����� �� 56;8-�� ����"���� ��� ����� ������� :!# 9�6< ������� �� ) ����� � ��$�� ����� � ��� "�� ���#�� �� $���������"��� � � �����$� + ��� ��""��.�� )������� %���� "�� ���#�� �� ���������� ���� $���������"� �� ���"����� $���� ���

Page 29: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7; |}~����� �� |�����~���� �� ��èéêë ìíîïðîñð êëö÷ øùúú èéêë ûü ýþÿ� ���è èôêë ìêë��� ìêëüè�ïíô�ñ þ �� ù �� ù �� � ��ì ô�ô � �� �� �ü � �� �� ��" �#�ò �ð ü� �� ü� � �� �� ø �) � ��21 �� �� ���þ �ü � �! � ��ì��3�ôí ü� � 4 ���$þ�% � �� &� �!' ü� �# ññô�ñ�

*+, - 9�6 [ ���� ������� �� ��0- ��� 0 3GZ��� �(�������� � -� ������ � �� 58�5DTJ�63S5DT ����� ����1 ��*���( �

c� �2 ���� ����� ����� �� ����� "� ���#�� � 658276�36� =89 %�� � ��� ���"��� � ��� ������ ��� ���#������� �� ��"����� �� "��#�#�� $���������"� 5= 98 �èéêë ìíîïðîñð êëèîõ �ÿë �óí è#êë ìêë �����ò �ô ò �� � � �� � ��

* +, - 9�> [ ��� ���"��� ��� ZG/W�-� �������������� ��� C������� � ��� �������� � � ������� ��� ��� ����"���� ��"�� %� ��"� �������� �� ��:��0-< �� ���( ��� � ���� � -� ���""� �� ���#�� � 0- ���#���" $��� ������� ����� �""� "�#��� + ������.��"� ��� ��� ���"�������� �� ������� � -� � ��#����� ��� ��0- ��� ������� ��( $��� �"�� ��"� ����( �� %�������b�� �� �� �� �� �� ��"����� �� ��� ���� ��� �(��� � ��� "��# :�"�� � ���� ����� �� " ��� �%��< �

� º�¹���������½� ��� ����� �� ¼�¸¿½¸¾��¹��Z� " ��� �(����� "�� ����� ���������� ��� ��� ������ ������� �� �)����� ��� �� �� ���� $��) "�� � ��� ������^ ���� !�)"�� ���� "��� ������������ � G��� ��"� "�� ��� �"� ��( $�������� ��������"�� ��� ��� ���!��� � ����)����� ��� �� �� �����)"�� ��� � "�� ������� Z\d6 �� 4S�������� �� ���� �"�� ���� ���)"�� + �" ��� ��"���� �� �� ����� "�� ������������ �� � ��$�� ���� ���� "�� �������( � d ��� ���� �� � "� �� ��"����� �� ".-�#�� :�������� ��� �� �

,3d�< �( ���� ��� "�� �������( ����������� + �" ���� ��� � ����) "� �� �� ������� "�� #���� �� � ��$�� ���� ������� ��� ��( ����"���� �� �� ".-�#�� �-� !#��� 9�B ����� "�� ����"���� �)����� � ��� G����� J-���( � -�� �� �� ��� ��� �)����� ��� "� �&������ �"������� ������ ������ ��� "� �� ���� � 4D8 �

èîõ �ÿë �óí :; ôòí �ô èîõ � ò :; ôòí �ô èîõ � ïîí < èôêë�ïíô�ñ ��� �� � �� � ��ì ô�ô �� ü �þ � �� ��ü"�#�ò �ð �þ �� �� � � � 21 � �ü þ �þ � �� ��ì��3�ôí �� � �� � �� ��ü

*+, - 9�B [ d������( ����� �� ��0- ��� G����� Z�� "�� ������� G����� �� ������� � ��������� �� $������ �� #��� ���� ��������" "� $��%����� ���"����� ��� " ����� )"� ��� �� ��"������ � � ������ ���� �� ���� ��� "�� � �"��������� ��� ������ ��( �� ��"������ � +���� �������"���� ��� S << �

Page 30: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��= � |�����~���� Æ��¨ ��� � Ç � >|~� �� 7 9-�� ����"���� �� ��0- ���� ���2 ���� ����� "� ������� )&��.���� �� "� ������� ������ �� �� ��"����� c)2 �������� " � E���� "�� ���#�� �� ���������� ���� $���������"� �� ���� "� ��� � ����"������� ������ � ��(�������"�� � ��$�� ����� �� ��0- �� ������ ����� �� "� ������� )&��.���� � 4 ��� "�� ������ ��� "�� � ��$�� ����� �����"�� ������� �� "� ������� ������ � ��� G����� � �� � "� ������� )&��.���� � �c)2 ������ �� " ��� ���2 ���� ��""���� %�� "� ������� �� �� ".-�#�� + �� �)����� " ������ ������� '

Caml − Light ≤ ObjectiveCaml − bc ≤ CeML ≤ ObjectiveCaml − pentium

èîõ �ÿë �óí :; ôòí �ô èîõ � ò :; ôòí �ô èîõ � ïîí èôêë��ò�ô ò $?ôïí �õ % � �� � �ü � ��� � ��

* +, - 9�@ [ d��"��� ��� G�����

� �¾�¸»�� 3" � ������ ��� %������� ��� �� "����� ��� ���������� ��� "�� � ��$�� ����� �� ��� ��,������ �� .��"������ �/0- + ��� � �����&�� � ����"��� "�� #���� �� � ��$�� ����� �)����� ��� ��� "��#�� � ������ �-�� ����� �������"���� ���� ������ �� �� ��"����� c ��/0 �- %�� ������� ��� �(�����)"�� � ��� "� �����""��"���.$�� � � ��(������� �dSß ���@ $~�� �}x��~y I{�| �AB� ¯ C D$% & �w

-� �� ��"����� c ��/0 �- 59;=8 ��� �� �� ��"����� �� ����)"� c)2 ������ �� " � ��� "� �"���.$�� � �dSß59>;8 � Z�� )�� ��� �� $���"���� "� ��,����� � ����"�������� c)2 ������ �� " �� �� �� ������� "�� � ����) �"����� �������� ���)�"��� ����� ��,������ "��#�#�� �� ��"��� ���� �dSß + �� �������"��� �à 59>;8 � �� ��� ��� ���� �.�&� � �� �� ��"����� � �c)2 ������ �� " ���� �dSß �� ������� ��� " ����� ������� ���� ���( + ��� �"��Á� "��� ����)�"��� ���� "� "��#�#� c)2 ������ �� " "� ��,������ �� UZV/WG �-� �"���.$�� � �dSßù �� ���� �� ������� �À � �����#���� ��, ������ "��#�#�� ���� �� ����� �� �� ������ ����� �� ��� �� �&��� � �� �&� �� �ßZ :*s�� sp ýue l ©unhl�< %�� �� " ���������� ��� � ��(������� �-W:*s�� sp �gpqkgq l Ekphi� l< � ���%�� �� ��"����� �� "��#�#� ������� �� ���� ����� ������� � ����)"� 0 Z3-:+ itfs©sr h °p hlf� lmighl �gpqkgq l< %�� ��� ������� ���� )"� �� �(����� � \�� ���"������� �dSß �� � ������������� ��( "��#�#�� ������� ��� �� � ������ %� ��""� �����"� � -��� ���$�� ��� �� �&��� � �� �&� �� #�������"��� ������� ���)�"��� �-� "���� ��� "��#�#�� � ����� ��� ����� �"���.$�� � ��� �����%����� � c� � ��� ����� �� #����� �"����%����� � �à + �à �� /àû ��� ����� ��� "��#�#�� ���� ������ �� � S�,�"� + Z��� �" + Z������� 0- # + Uà C +0 �����&F �K ��� %�� " �� �"�������� ��������"� �dSß $��������� ���%�� ��� ���� Ý ����å � + ��� �� ��������� Hc���Z�����I ������ "� 2 ��� �� � W���� ÊQ � ��� Ý ����å � �� \��( KZ4 + �� 0 ��� ÊÊ � ��� -���( � c� ��2 ���� �"���"� �"�#�� �� ���� H�c0G3-S cd�S + W\d SRSWFÝVSWSI�/� !��" �� ��� ��� ����� ��� �"���.$�� � �"��."��#�#�� )�)"�����%�� � ��(������� ���%�� + �*�� �� �^ ���� +%�� � ������� ���� �"��.�&��� �� � c� �� ��������� �� T���" �ÿ �� ���!�!�� ��!� � �� �w ���� ��� �� ��G���� �!�� ��z��� ��z����L ���� �� �� �G��� �� �H �!w�� �G��L ��{ ���LNIH �JK�L ¢¢- �!L ������ ���� �� !���L M ���!!. ��� ���� ��� �wÖH � ���� NOPOQRSTNK� � ���� �� ���!�!�� ��!� L�!v �����N��� ��L ���LNM ��� ��w �!/ ��w � � ���� � ��w�{G!�� � ���� �ËW� �G� �� ���!�!�� ��!� � ������ËË ��!� !�! ��!�

Page 31: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

77 |}~����� �� |�����~���� �� ��G��� �������� ����� ������ " ����!�� �� � ��� ����!�� "�� ���������� ��������� �� �� ���� ��� �� ���"���� ���� ��"����� �dSß ���� ����� "��#�#� �� �����"������ + c)2 ������ �� " 59;;8 �- �� �"�������� ��� ������%��� �� �� ��"����� ��� "��#�#�� $���������"� ��� "�� ���#� ��������� ������� �� �� �� �������� �� ���� �^ ���� � ��� ��� ����������� ���"� �� ��� ������� ������""�� �� ����"����� � ���������%��� �� ���� ��� ���2 ���� �������� ��( �����""�� ������� ������""�� � ��� "��#�#�� �)2 ��� �� � "��R0 :üg g Uifhkgo + gt¥ip l< �� "� �-W �� �dSß � S� �,�� � ��� #������� "� �*���� �� ����#� ��� �&�� �%���� ����.� ���� + " ���������� ��� � ��(������� �� ��� ������� �, ����� ��� ����!������� �� �&��#� ��� "� ���� ����#�� � - ����#� HW���� � ß�#� /��� �� d �������&I �� 5=8 � ���� �"�� �� ��� �-� �� ��"����� c ��/0 �- Êè �� ���� �� ������� �� ��,����� �� "��#�#� c)2 ������ �� " � Z� ��������"����������� ��� �"��� "� �� ����)�"��� ���� c)2 ������ �� " � G��� ��"� �" ������ ��� �����""� )������ �� ���.������� �� ���� �� ���� � � �� �� ��"����� c)2 ������ �� " � 3" ��������� �"��� "�� ��^ ��"��� �� #����������� ���� 3- �&� � ���� "� ����� �À c)2 ������ �� " + ��� $��� �� ���#�� � �&� � + � ����"��� �"�� ����� ��$��. ����� ���� "� ���� ������� � 3" ������� ���� ���������� �� ������������ "�� ��$�� ������ �� �&� � �� ������� ��� ��� "��#�#�� ����� �������� � �c)2 ������ �� " + ������� %�� "� ���#�� � � ����#��� ����� �&� � � 4 ���������^ ��"��� + � "�� �"����%��� + ������������ � ��� "� �� ��"����� �� "� ������ $���������""� �� "��#�#� ���� ��� ������ ������""� �� ����"���� � ��� "�� "��#�#�� �)2 ��� � -�� � ����#�� �� "� )�)"�����%�� �������� :5�7�4â < ���� "� )�)"�����%�� SÁ�T7 4<5 ��� ����� " �������� ���)�"��� ���� "� "��#�#� 3- �� "�� )�)"�����%��� �(�������� ��� � "� �� ��"����� c ��/0 �- ��� ��������"� ��� ����� �� c)2 ������ �� " + �� ���� � � ������ �� �� ��.��) �"��� � ��� ���"��� ��� ��� ����.� ��á�#� :�sshnhfge < � / ���� c ��/0 �- � ��� ���� ������)�� ���� $�� � � �������"������� �dSß �c� �������� ���� � ��) ��� "�� ������������%��� ��������"�� �� "� �"���.$�� � �dSß ���� "� �� ��"����� � ���H�������I "��#�#� � ��� ������� ������� "� �� ����� ������ � ��� "� ���"������� �� c ��/0 �- � K ��� %�� "��� ����)�"��� ���� c)2 ������ �� " ��� ��� ����� ������� ��������" + ���� ����� ����� �� ��������� ��� �^ ��������������)"� � ��� "� ���� ������� � G��� "� ����!�� ���� �� ������ c ��/0 �- ���� � ���� ���� ��� �""������������ c)2 ������ �� " �� � ������ ���� ���� "� �� ��"����� Uà :%�� ������ �� ����.���� )"� �� "��#�#�c)2 ������ �� "< �� "� �� ��"����� Z0- �dSß ���� �� ����� ���"���� 0- � 4 ������� ������( ��� "� �� ��"������� "��#�#�� $���������"� ���� "� �R0 �� �dSß ���� �� ����� ����� %�� ��� ������( ��� "� �&��#� �� ��������� ������� � d���� ����"����� �����""� "�� ������������ �� ��� $����� ������( �

°±V ±° W À¿º´Xß»·à´ ±YZ[-� �"���.$�� � �dSß ��� ��������� �� � "� ��������� ������"�#�� �� ��$������ ���� "� ����"��� � ���� ����"�������� Ý ����å � + ������ � ��� "�� ���"�������� �� )�������%�� %�� �� �������� Ý�) �� ������ ������������ �� �� � ������ "�#����"� � S ""� ��� ������ ��� ����� �� �����""�� #�������� �� ������ �� #������ �� ���������� � �������� + �� � �� ������� ��� �(� �"� �� �� ����� ��( ������� �� Ý ����å � �� ������ �� )�)"�����%��������#��� 59>;8 Êù �c� � ���������� ��� ���%�� ��� ����� �"���.$�� � ������� " �\ �" �� ����"��� ��� + �� �"�� �� ���!%�� ��� ������"��� ��� � ��� �� ��"����� � -� �"���.$�� � ���� ��� �� ��������� ��� � ��(������� �-W ��������""� ����� � ���� � ���� ������ ������""� ��"� Êû �� � ���� )�)"�����%�� �� ���� ��� K�- Ê� � -� ������ ������""�����!� %�� �� ����.� ���� 0 Z3- ���� ���� "� ���"� �� �"����� �&� ��� �ßZ � �� ����.� ���� ��� ������� �(��������� �� ���� �(�����)"� ��� " ���������� ��� � ��(������� �� � �������� "� !#��� 9�A � \� ��%����#� GS:B sfhg�ol ª� ltkhg�ol< �������� ��� ������������ 0 Z3- ���� � ��������"� !������ �� ���������� �c� �����""� ��.������� "�� ��������"�� ������������%��� �� "� �"���.$�� � '

Ëé �LL � �vw ��� w ���x� !�� ��!��� ��Ëÿ ]hië îò� �] Zóó êëìì^_ � �G� �� ���!�!�� ��!� � ����� !�ÖË�Óî` a Ó ô÷ðñöì îøë�ñðô�ò `bïðëY ÛË�cöïë � ìöïï ó ô�÷ö÷b Û

Page 32: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��= � |�����~���� Æ��¨ ��� � Ç � >|~� �� 76

d ëïï�ñ÷�ëïÒ `\óe

fghijklmno

pgqrsft� -

gquvwt

-

-

d ëïï�ñ÷�ëïÒ `\óe

f-�� ��"�����ghij

xhyz{j·½¾¼�����½� |

Pþº¹���½� |

* +, - 9�A [ �� ��"����� �� �(�������

)� ¹½���½ ¹��� ( }V)� ���� �� ���� )"��� �&� � ' ���� � �"��� ��� �À ��� ��"���� ���� ����Æ��� + ������� �� ���"����� ��� ���� ��� �&� � � c� ������#�� "�� �&� ��.��$������� E�$������ ß&� �� :� ��� ��� �)2 ��� �""���� ��� "� ���< �� "���&� ��.��"���� U�"�� ß&� �� :�""���� ��� "� ��"� ���%�� ���< %�� � ������ ���� ���������� � 4�� ������������

â6¤ �� 23â6¤ � �� ������ �� 2 ��#"�� ����� "�� ���( ��������������� � -�� �)2 ��� �� ������� ��� ��� �� ����� ������� + ��""��.�� ���� ����� �� �����)"�� "� ��"�� �� �"�� �� "� ��"� � S� �� %�� �������� "� �����Á"� + "� ������ � �� �� "�� ��� �"� �� ������� :�������""� ��� ���� "������ ������� + �� � � ��� ��� ����������� < +"�� )������ ���� �� ���� � ���� � � ������ �� #��� "�� �(�������� �

f º¼ �½��¾ ���-� �� ������ �� )��� �� �dSß ��� " ����� )"�#� :g��� )"& < � \� ���� )"�#� � ��� ���� ��#�� " ������ ���� �"� ��&���#�����%�� :nhfspq pg� ipq< ' "� ������ �Á�� � ��� �"��� �������� �� ���!���� �� ���� %� ��"�������� + �� %�� � �� �� �� �����#�� �� ���� + �� �"�á��� " ����� )"�#� ���� "� ����� #"�)�" ��� ���� )"�#��Ê" +�� ��� ������� �� ����" � ������""����� � �� ������ � ��� �#�"� ��� �(�"���� �!� �� $���"���� "� #������ ���������� �� �� ��#����"�������� ���������� �� �� � ������ "�#����"� �

}~¸��º � ���þº¹���½�G���� %� ��� �(�����)"� � ��� �������� �� ��,������ �� ��"������ + "� ���� 0 Z3- ��� �&� � �����%�� ��� "����� ��� ���� )"�#� � ��� ������ "�� ������������ �� �&��#� �� ��� ��, ������� ������� � 4 � �"�� + ���� ���� .)"�#� ������� ����������� �� �-W � ��� ���� ��� �� �� ����" �� ����!������ 6æ?8Á 4Ee %�� ������� ��������������� �� #������� �� ��"�� + ��� ������� ���� "� ����"����� ��� ��$������� ��� ���� )"�#�� �(������:��� �"� ������� ��� $�������� �(������ ��� �(� �"�< + �� � � ��������� ������� �� �&� �� � ������ ��������

" ��(������� � - ���$�� ����� �� �&��#� ��� ��������� " ��(������� + �� �� ��� � ������� �&�� �%�� �� �&� �� + "��-W ���"����� ��� �(������� � ��� ������������%��� ���� ���� ��������)"�� � ��� "� ��� �� � ���� � ��� �� .��"����� ��) "��� 0 Z3- � -� ���� 0 Z3- ��� �� ��( ����������� �� �&� �� �� �� ����!������ ��� ��� �"� H����#���I :� gpgq lm tsml< � -� �"���.$�� � � �� �� �����$��� ��� ��� �"� ��� � ������� �� ���� ��� #��� + �� %����� �������)"� � ��� ��������� �� �������� �� )�� ������ �c� ���� �� �"�� %�� " ���������� ��� ��� ��� � ��� ������ � �� ����� ������� ���� ���%�� �� � ����:Ø* �� �&� � +��Æ ��� �� ���� 59>;8 + �� %�� �,������� "� ����"��� ��� ��� ������ �� #������ �� "� � ���� �Ë-�a� a ��Ù�Ó � � ÔÔÐØ ��� �Ó�� ÐÛ

Page 33: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7> |}~����� �� |�����~���� �� ����¸¿½¸¾��¹��

-� �"���.$�� � �� �� \���� �� ������ � �� �� ��"����� üknh °p ýi� l �&��� ���%�� :���%�� ��������� �� ��"�� "��� �� ��� ��� ��� ��� �"< � 3" ��� �#�"� ��� � ����) "� �� �����.��������� �� ��� �� $���������. ��� �� ����� ��"��� �� ���� )"�#� �� ��� � �#� ������ �4 ������ ���� + " ���� �" �� ������ � ��� �� $���� �� $�á�� ��������� ��� ���"� + �� %�� �� ����"� �������"���� ������"� � ��� " �� �"�������� ��� "��#�#�� $���������"� �

� ºÅ�þ �½�S�!� + "� �"���.$�� � ���� ��� ��� )�)"�����%�� � �����.���� ������ :f�C������ < %�� �������� "� #������ �� �����&�� �%�� :����#� ��� + #��������� �� �(������� < �

°±V ±² �»à¹¸À¿º´Ý· � ���� ¸�}¹�º¾� �º�º¸��

d���� �)2 ����$ ��������" ��� �� ���"���� �� � ����#� �� c)2 ������ �� " ���� "� �"���.$�� � �dSß ����"� ����� ����)"� ���� " �� �"�������� �� ��$������ + "�� ������ � ��^ ������ ����� 2 �#�� ����������� ���� �� ��� ����� �� �/������ ����#��"� ��� �� "��#�#� $���������" ���"�� �� � c)2 ������ �� " + � �������� ��� ������ � � �����$��� �)2 ��� + ���� �� �&��� � �� ���"�� ���� ����� �� ��� � ��� �&��� � �� �&��#� �����%�� ���� ��$������ ���&� �� � ���� ��� ����� $���"� � d���� �(� ��� �������� �������� ������ �� �� ��"����� %�� �� )������ �� ����������1 ������� ��� "� ������ � �� �� ��"����� �������� �� �/0- + ����� "�� ������ � ����"&�� #�� �����"��� � ���$������ �� �&� �� � d��� ����� ����� ���� "� ���#�� � �� ��"�� ��2 ������� ���� �� "��#�#� ����� �.������ ������� d��Dâ7� �� �� ��"����� �/0- �����������" + �� � �""����� ��� "� !#��� 9�= � d��Dâ7� �(�"�����"� #������ �� " ���������� ��� ��� $�� ������ � d��� ������������ ��� �����""� �������������� ����� ��������&� �� ã��Dâ7� ' �� ��������� ��� �������� "� ����.������� 9�6 �7 �

����� � ������

����� ���

����� ����

����� ��� ���

����� � ������

�����  ¡�� �� ��¢£������ �¤ �¥�

�����  ¡�� �� ��¢£������ ¦��� �

����� ¥������

�§  � � �� �£���¨�����  ����

©ª«¬ ­®©ª«¬ ®ª ©ª«¬ ®©¯°±²³´µ¶·¸¹º»¼ ¼¸·½¾·»¾ ¿ÀÁ¿Â ´»²Ã ¹¸ Ä·³ ¿Å

* +, - 9�= [ K������ ��� �� c ��/0 �- ��� "� �� ��"����� c)2 ������ �� "

c ��/0 �- �����$�� � �� ���� )"� �� ���"�� �/0- �� �� !����� �(�����)"� � ����)"� + �� � ��� "� !#���9�A � -� ���� ������� ��"�#�� �� ������� �� )�� �� �]���� �� )��.������ :#������ �� � ���� + �������.�������

Page 34: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��= � |�����~���� Æ��¨ ��� � Ç � >|~� �� 7B� � � < " ���������� ��� �-W �� ��� )�)"�����%��� �� ������� �� �¼¸º�������½� ��� �½��º��Æϼ�� �� É���� -� ���������� ��� �&� �� �� )��� �/0- �� �&� �� �dSß �� � ��� ��� �� ���)"� � g e fisfi+"� �&��� � �� �&� �� �� "� �"���.$�� � ����� ��� ��^ �� ��� ����� � / ���� "�� �&� �� �� )���� ���� �����$�� ���� "� $�á�� �������� '

·�( ) )��" ��� C��� ���� �����#ÇäPÆ ���67 ���67 C���@> ���� Z����#K��"���

È����¸� ��¸�¹��¸º�� -�� �.��"��� + "�� ��)"���( + "�� ����#����� ���� + "�� "����� �� "�� ��"���� �� �&� ���� �� + ���� �����������""� ��� ����������� �� � ���� ��� ��� )"� �� ���� "� ��� + ������������ ��� "��� ���""��� ��� �� �� ����� �� h�# :%�� ���� ��� �(� �"� ����� "� ������������ � ���� ��"��� � ��� �&� � �� �< ���� )"��� ���� �� ��"�� �� 0 Z3- �� � ��� ��)"���( � ��)2 ��� :6â58<� ª« < + �� %�� ���� �)"�#� ������� �������"�� "�� �&� �� �� )���� %�� �� ���� ��� �� ������ �)2 �� �

©�¸¾ ���¸�� 4��� "� �� ��"����� �� �/0- + "�� $�� ������ ���"����� "�� ��"���� $���������""�� ������� "��� ��������� ��� + %�� ���� �#�"� ��� ��� )"� �� ��� "� ��� � S ""�� � ������ ����������� ��� $�������� ����""� ��� ���������� : " ����� �� �����#� �� �� ��������� �� �&�"�< �

ÈÉÉ ��� ·�( ) ß����� ���� ������� ��� ��� ���������� �� �"����� c)2 ������ �� " �� ��� ���������� �dSß����� � ������ ��� " ������� � c���� "�� ��^ ��"��� ������%��� %�� ��"� � ��� :�� ������ ��� ��, ������� ���� "�� ���"�� �)2 ���< + ��"� ��� ����� ��^ ��"� ��� "� �������������� ��� �)2 ��� �/0- �� ���� �� ���� ����� �������%�� ���� ����� ����� ' �"� � ������������� �"�� �� ���� %� ��)2 ��� + ��� ���"� ��� ������� ��� )"� �� �� ��� ���� �� $�������� :"� ������ � �� "������ ������� !#��� �(�"����� ��� ���� "� ���� ��#�����< �·½��¸Ê �� �� ���þº¹���½��¼¼��¹���½� 4��� c ��/0 �- + "�� $�� ������ ���� � �"������ �� � ��� �"����� �������� � ���� �"�������"������ d�D @å Ìd�652Á8 + � �������� ��� ��� �� �������� �������� " ���������� ��� �� "� $�� ����� �� ����� �� ���( ������� ��������"�� ' ��� ������ 8¤8< %�� � �"���� "� $������� �""�. � � "���%� ��""� ������"�%��� ���� ��� ��#� ���� + �� ��� ������ �TT�e Ë 6â58<� =Ê 6â58<� + ���"���� �� ��� � ����"�������������""� + %�� �������� "� �����""� $�� ����� �)����� ����� ���"������� �� ��� ����� ��#� ��� ������� �

Pþ¹�¼��½�� -�� �(�������� �/0- ���� ������� ��� � �"������ �� ������ ����� �� ������ � � ��(��������� "� �"���.$�� � ��)"� + �� �&�� � ���� �"���� d�D @å Ìæ¤ <8T� 463 %�� ������ �� be5�8D Ìæ¤ <8T� 463 :"� �"���� ��� �� ������ "�� �(�������� ���� "� �ßZ< �Ì� � Í��ϼ��� �� ������� ����¸¾ º� ���¸�

-� �� ��"����� c ��/0 �- ����� ��� �� ���#�� � �/0- ���� $�� � �� ���� d��Dâ7� � �� ���� � �� �"��� ���$�� ����� �� �&� � + �� ���� ������ + �" ���"��� ��������� ���� �������� %�� �(�"������ "�� ������������%��� ��" ���������� ��� � ��(������� �������� � G�� �(� �"� " �� �"�������� �/0- ������ �� ������ �� �#��� "����"���� �������� �� "�� � �������� ��� ��� )"� �� �� "�� ������#���� ��� �� �ih �� hgq � / ���� " ��""� ������ � ��� )"���/0- ���� ��� ��� ����� �������� �� ������ �� ��������� ��� � ������������ ��� ��� ������ + %�� � ��� ���� ���� "�#�� ���� "� ��������� �� )"�� � S� �������� �� ��� "� �������������� ��� )"� �� �� � ��)"���( � ��)2 ���

Page 35: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7@ |}~����� �� |�����~���� �� ���� 0 Z3- + �" ��� ���������� � ��""���� ��� �������"����� �� " ������� ��� #���� �� �����"����� �� �"�%�� "� #��������� �� ���� + �� ���"� � ��� ���"&�� �� ���� �"� )�� ������ +� ����� ������������ ��� ��$�� ����� ������""� ��� "�� �&� �� �� �� 2 �� � -� ��)"��� ������� ����� ���#��������� �� ���� 0 Z3- ���������� ����� %� ��""� ��� �#������� ��� �&� �� :"� �����)"� � ����#�� �� ��)"��� < '

Z����� �/0- 0Z3- �� ��������� ÌÎÏÐ Ñ É �7�6< � � ì��öì ïñ÷ ìö í ôìë Û�7< Ì4U ÌÏ îòðôë÷ Ò ïñ÷ ìö íôìë Û���� �"� )�� �78�8D ÌÁ8E �iö÷�ëY ëòð [ ì[Y ëòðÎÑ ÎS8� � ÏÐ ÉÐ :Ó< ^��Ô ëð_ �ñ ðö� ìëöñ Û�7< Ì4U ÌÉ îòðôë÷ � ïñ÷ ìö íôìë Û�77 a�� ôð ô�ò Û

/� ������ �� :Ó< + "� �� �� �� "� ��"� �������� ��� ��$������ ��� �� �)2 �� �"��� %�� " ������������ �77 �������� ������ � d��� ����� ������� �� ������� "��#�#� ����� ������� ã��Dâ7� + �������� ���� ��� �&� �� �� %���� � ���� "�� ������������ �� ������&��#� ���%����� � 4 ��� " ��(� �"� ��������� + ��"� � �� �� � ���#������ �������������� 23â6¤ �� ������ �� :Ó< � -� #������� �� �*���� �� �&��#� ��� �� $��� ������� ��� ���������� ���&��#� �,����� �� � ��� ��� �/0- �

V���¸¿�¹� �þ�º¸���¸�K��� %�� "�� %�������� � �������� ���)�"��� ����� "��#�#�� � ������ ��� ��� ����� ���� ��������� ������"� + ��������� �� �� �"��� �� ������ � � �������� ���)�"��� � )�&������� � �� ������ � ���� �"�� ������� ��� �� ����0 Z3- ������ �� ���#�� �� �/0- � S� �,�� + �/0- �������� ��� ��� �"� �(������ ��� $�������� ��)�)"�����%��� ������� �� � � G��� c ��/0 �- + �" ��� ���������� �� ������#�� ��� ��� �"� ���� ��� )�)"�����%����dSß � ��"� � ��� "��#� ��� ���"��� ���� " ����������� c ��/0 �- �� "� )�)"�����%�� �������� c)2 ������ �� " +%�� ��� ��� ��� ��� ) ���� %������� �� ���� � � 3" � ���$��� ��� ���������� �� �������� ��������� $��������:������� ��� �� ����.� ���� + �� )��� �� �à<+ ��� �" ��� �#�"� ��� � ����) "� � ���� �"�� ������� ��� ��� $���������� "� )�)"�����%�� �� ������� �dSß + �� � ���� " ��(� �"� ������� + ���� �� ���"� be5 �� "� )�)"�����%���������� �

N� ���� ��z� � �� � ������ � ������ �Õ������ Õ Õ �� ��!�����O{�� � �T����!�� �� ÕÕP �T����!�� ��Ö������ Õ Õ������ Õ� � � � �� ��� �� � � � ��z� � �� ��� ���� � � ÕÕ �� � ���� S!�z�!w�G �� �-� ������� c ��/0 �- �������� �� �� ���� á�� �� ���� �/0- ������ �� "� $�������

×8�æ39 4Á63D83�?�Á 4�â�8 �� �dSß �

°±V ±V W ·´à ¸´·µ ·¾µÝÀº¿ºµf ���¸�É���½� È �·�( �) Ø ÇÙ

-� ��� ���� ������� �� �� ��"����� c ��/0 �- ��� ���� ���)"�12 ���� �� ������� Ý ����å � � d��� ����������� ��� #����� ������ �� "� )�)"�����%�� �������� �� c)2 ������ �� " ����� %�� "� )�)"�����%�� SÁ�T7 4<5 �-�� ������ $���������"� + � � �����$� �� �)2 ��� Ê# �� "��#�#� ��� ��� � �"����� + ����� %�� "� �&��� � �� ���"��:$�������� + �� ��"����� �������< �Ë.Ó� ô÷ ìö íö�ë Ú îc

12�ë �öY ôì í�ñ÷ ìë �[ðöôì �ë ì `ôY íìöòðöðô�ò Û

Page 36: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��= � |�����~���� Æ��¨ ��� � Ç � >|~� �� 7A��¸¿½¸¾��¹��

3" & � ��� ����� ��^ ��"�� ������ ��� �� �� � ��(�������� ���� "�� �������� �������� �� �&��� � Ý ����å � �c� �� �������� ��� �� �� ���� � �� ������ �� ������ "�� �� �� ������ ���� "� ��� ������ Û���� Û �� ����"�� ��� �"� �&��� �� : "� ������ �� "� �� ���� � 4D8 � �\��( < � - ����"������� �� � 4D 8 ���� <eSÚ 43 ÊC + ������.������ \��( ���� Ý ����å � + � ���� ��� �����$������� ���� "� ����� �À "� �� �� ��"��"� �� �������� %�� "�h¥flgm ��������" � 4 � �"�� "� ������ � �� �3ß ��������� ��� ��, ������ ����)"� ����� "� ��� ���� �(�������� ��� ���#�� � �� "�� ��������� � G��� ��� ������� ���� ������� "� �� �� H���"I ����� ���� " ��(������� � ������#�� � �dSß � �� �� �� ��� ��� �&���� �� ����� �(�������� �� ��" �� "� ��� ���� �

3" ��� ����������� �� �� ����� ��� ������ ��� ���� ��� �� �� ��"����� �� ����.� ���� � �c)2 ������ �� "%�� ���� ���� �� ��$������ � 4��( ������ �� ��"������ ���� �dSß ���� ���"���� ' Uà %�� ��� �� ����)"� ���� "���&�� � � �����$J$���������" � �c)2 ������ �� " �� Z0- �dSß %�� �� ��"� "� ��&�� �� Z0- 59;A8 �c� � ��� #���� �� "�� ����� �������� �� ���( #���� �� '[ "�� � ����� ����� �� � @3�8SÁ��8 :��"��" C������< + b4898 :"����� � ��������< �� > 49æ2 <�47 :��"��" ����� ��< �[ "�� ����� ������� ������ ��� ���"�������� �� � Ü6e8Á :��"��" �� ��� �� + ��� �"� �� $������� < + ÝÜ :��"��"�� ��� �� + $���������" �� �(��������< �� Þ2 <�84< :��"��" C������ �� ��)���< � �� ������� ���� ���� ����$������ ���� 5= 98 � ��� ������ ��� ���#����� �� �� ��"������ �� "��#�#�� $���������"� �-�� ����� �������� ��� ��� ���"���� ��� �� G����� 3R 7 +>TV1 ���� Ý ����å � ÞG� 3"� ��� ��� ������������ ������ �)����� ��� �� �� ��� ���� � ���� ������� � ��� "� �� ��"����� ����$ :6<�D �6T� < � c� �������

��öY ì�íð ��öY ì� ß `�aÒ ôó àá `Òó Ûâîh3���#���� ; +AB 9+A? 7 +A6 6 +7B ; �66Z���� ; +A6 > +;A @ +B? 7 +=A 9+9?4 ��S��"� ; +?6 96 +9 9= +@ > +?> 9+@?K�&�� ; +>7 9+?7 6 9+? 7= +; 7> +AãK 9+;A A +6; 9A; 7 9@ 7;?d��"��� 9+9> @ +BA A +B6 6 +A? 9+;>

*+, - 9�? [ ���� �� � ��$�� ���� :�� �� ���" �� ��������< �

�� ����� "�� ����"���� �� c ��/0 �- ���� "� �� ��"����� �� ����.����� :6<�D�<< � S� ������ ��� �(� �"�� ����$���������"� "�� �� �� �� c ��/0 �- ���� ��� ���� �� ���( � �6<�D �< :$������1, 5

< � G�� ������ �� �)����� �� ���� ) ��� ����"���� � ��� �� ���#�� � ���� $���������" �� � ÝÜ :$������25

< �3" ��� ����� %�� "�� �� ��"������ Uà �� Z0- �dSß ���� ������ ���� ) ��� ���� �� ��� " %�� c ��/0 �- ���"� �������� ��� ��"���� $���������""�� �� ��� ��� �� � �"& ������ � ��� ��� ���( �� ��"������ �� �"�!���"�� ����������� �� � �"& ������ � � Uà �� ��"� ���� ��� �(������� �� 0 Z3- + ��� �"�� 3-Þ 59>@8 + ������������"� #��������� � Z0- �dSß "� ������ �� 0-2 59=8 �, ����� �� � ��� �� " �������� �� "���� ��� ���"&����� " ����� )"� �� ���#�� � ���� "� ������ ��� ����� � ����� �������� ���� ������� + %�� ����� �� ) �������"���� � ��� "�� ���#�� �� � �� $���������"� + � � ���� "� �� ��"����� ������� �-� �� �������� c ��/0 �- �� Uà ����� ������� �� $������

2 " �������#� �� �� ������� � -� �&��#� ������ ����� ������� ã��Dâ7� �� c ��/0 �- � ���� ��� ����1 ������ � ��"� �����b�� ��� �""� ������ �� ���������� ��������� �"�� � �������� %�� ������ :��)"��� � ��)2 ���< �� %�� ��� ���"� ��� �� ��"����� " ������ ��� ������������ �� �������� �� ����!������ �� �&� � �&�� �%�� ��*������ � G��� ������ ��"� ��� ��$�� ����� ����"� ���������������� �� "� ����� �� �&��#� �� ���#�� � ������ ������� ���������� %���� �� �� ��"� ���� ��� �������&� �� 5?=8 �

ËK ��{� �� �!��

Page 37: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7= |}~����� �� |�����~���� �� ��°±V ±ä [·¿Ü¿Ýå ¶»¼¼´å´µ

- ����� �� � ������ �� ��"�� ��� ������� �� ���#�� � ������ �� �"������� "��#�#�� ���� "� � � �"���.$�� �� ���� ��� �����""� + & �� ���� ���� "� ���� $���������" �&� � � G "������� �� ��"������ ���� � �� 0- �� ��Z��� � ��� �� "� 2 ��� �� ��)�� ��� ������ ?; 5678 + 59>A8 + 596A8 $���"����� " �������� ���)�"��� ������� � � d���. ���� ������� �� � ��)"� ��� ������ �)������� "��� �� ��������� ��� � ��(������� #����� "� ����� ������� � ���� �� "�� �������� �� �����Á"� :�(��������< �,�� �� )��� ��""��� ������ �� �������� " ��(������� + �����������"���� ��� ���� "� ����� � ������ )"�#� �� ���� ��������� �� ��, ������� ������� � -� �R0 �� "� �WS:üg g Ekphi� l ªp ifsp� lph< ������� �������� �� ������ �� �������� � � ���� � ���""���� ��� ��� ������� �� �������� "� �"���.$�� � ���� � /���� "� �"���.$�� � �dSß �� � ������ ��2 ���"���� ��� "��#�#�� $���������"� �&� �������%�� ��� :�� � 0-2 59=8< �� �&�� �%�� ��� :�� � K�#"� � 596A8< �� ��"�� ���� "� �R0 � -� ����������� ���� ���� "�� ����������� �� �&��#� �� ����.����� �� "� �R0 �� $���"����� " �������� ���)�"��� �� ���"��#�#�� ���� ���� ������ ���� �� $���"���� " �������� ������� ����� "��#�#�� � ���� ��� ������� � -�� "��#�#�� �� ��!������ � ������$���:°¯�< ���� � ��� �cWK/ ÊF %�� � ��� �c0èQ ���� "�#���� + & �� ���� � ��� "�� "��#�#�� $���������"� �� �V43WS�ß 5@;8 � ��� V ��Æ�""è Ê �� c�/0-34-èè � ��� c)2 ������ �� " � -� �"���.$�� � �dSß ��� �"�� �������%�� ��""� �� ���� + ��� ���� )"��� � ����)"� 3- ��� �"�� ����� �� � ���� �� ��� �&��#� :ß&� ��.R�"����< �������Á"� :��� �"� �� ������� ��� ��� ����������� < + ���� �� �� �"�! ��� "� ������ � �� �3ß � 4 ��� "�� ���(��� �� � ����� ��� ��^ ��"��� � ��� �� ��"�� ��� ������ �� ���#�� ����� ��,������ �� ���"� ���� + �à �� �"�� $�� ������ :0- + Z��� � + V ��Æ�""< + " �������#� �"��� "� :S�, �" + c)2 ������ �� "< �� "�� ������������� Z��� � �

°±V ±æ [·¿Ü¿Ýå ßݺݷµ µÝ· � ���� ¸�d��� ����� ����� ���� ����� ��� ���� ������� �� c ��/0 �- "� � ����) �"��� � ����"���� "�� "��#�#�� "��/0- ���� "� �"���.$�� � �dSß ���� ��� � ��$�� ����� ��������)"�� ���� �� ���������� "� �� ����)�"��� ��"��#�#� � ����#��� � - ����� � �������� ���2 ���� ���� "� "�#��� �� �� ����)�"��� ��� � �����#��� "�� ����"� �� ���!%���� �c)2 ������ �� " ����� �"���.$�� � + �� � "�� ���"&����� �&���( �%��� :�� "&��� + �� "�>< + "�� )�)"�����%����� ���!%��� ����� %�� "� hse ol lo� �� ������� ����" �������� �� ����"��� � ��� ����� ����" $��� �����%�� � ���"� ���� � ����� ��� $��# ���� � ��� ���#�� � �4� � ���� �� ��� �&��#� �" ��� ��#�����)"� �� � ����� "�� ��$�� ������ ��$����� ��� "� �� ��"����� � ß���� ��) ��� " ��^ ������ �� ���,�� �� �������"���J����������"��� �����"� ��� "�� ��"���� �����"��� � S����������� � ��������� ���� "� %��"��� �� ��� �� � ���� �� � " ����� ������ �� ��"���� �� ����� � ��(������� ��� ����� � ��� "� ��������� � ��� ������ � �� � ���������� � -� ���&��#� �� ���� ����� ������� � �c)2 �������� " � ���������� "� ���� ��"����� �� ����.����� 5@8 �À ���"�� ��������� ��$�� ������ �� �&��#� ���� �����.������ � - ����� ��� �"��� � ��2 ����� ���� "� ���� ����� ������� � �c)2 ������ �� " + ��������"� ��� �� ������ ���$�� ������ + ��� ��$�� ����� �� �&� � ��� ��!���""� � �� ������ ��� �������������� ������� �- ����"������� �� )�)"�����%��� �à + �� �� )�)"�����%��� c)2 ������ �� " ������ �� �à + ���� ���� ���"���� ���� ���!�� "� ������ �� "��#�#� $���������"J� � �����$J�)2 �� %� ���� c)2 ������ �� " � G��� ��"� + ���� �������������""� ��� �� °¯� �� �"�!� + �� � �������� �� �������� 6 + �� �(�����) "� � ��� " ������������� ��� ���"���)2 �� � �c)2 ������ �� " �� �� �à ���� ������( �� ����� �� ���"������� ��� �� � ��������"� ��������� ��� ��""���� ��,����� �� "� ���.#�� ����� $���������""� �����%�� ��� �&� �� � d���� ��"���� ��� � ��,��� + & �� ���� ��� ��� �"���.$�� ������������� + "� � ����) �"��� �� ������� "� ������ � ��)��������� �,��� ��� ��� "��#�#�� � ��� "� ����"��� ���� ����"�������� �ËM �!�� �!��éW �� ���!�!�� ��!� �!�éË ����Ö �� �!��éé ��� � ������ ������ ��G�

Page 38: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

��ç � |�� |� §¨��� Ç �è��¨ é �~ |�����~���� 7?��ê $~yç}�|�~y ¯ �ë� {| ì }x ç~�� �}x��~y

-�� ���( �� ��"������ ��0- �� c ��/0 �- ���"����� ��� ������%��� �� �� ��"����� ���� ��, ������� � 4 ��� "���� ��� ��� + ��0- ������� ��� ��$�� ����� �� �&� �� ������� %�� ��� �����#�� ��� �� ������������ �� �&� ��$���������"� %�� �������� " ������ �������� �� "� $�� ����� � 4��� "� ���( �� � ��� + c ��/0 �- �� )������ �������� �� "��#�#� ����� ������� <��Dâ7� �� �� ��"����� c)2 ������ �� " � - ���$�� ����� �� �&��#� ��� ��#����� ������ � ����� �� �� � ��� ��� ���� ���"���� � ��� ��#������ �� ���� ��"����� ��� �^ ���� � � ���� � �����"� %�� "� "��#�#� <��Dâ7� ��� ������� �����$�� � �� ���Dâ7� ����� �� ���&��#� �� ���� �� 2��Dâ7� �4 � �"�� "�� "��#�#�� ��) "�� �� ���� ��� �� � � ������ �� � ���� �� ��� ��� �&� �� � � � �� �� �� ��!��� ���&� � #�����%��α

:<7�Á Â< ��" %�� ����� ��"��� � ������ :43� < �� � ������� � ��� ���� ���������� ���� �� �&� ��� ������� ��� � -� "��#�#� ����� ������� 0 Z3- �� �dSß ��, ������� "�� ��"���� � ������� ��� ��������� ���"���� � -� �&� �α

� ��� ���� ���� ��� "� �"���� íâ58<� ��� ��"� �)"�#� � ��������"�� "�� ��"���� � �������%���� ��"� ��� ���������� ���� ��� ��������� �� ����.�"����� � �íâ58<� �� � � ��� "�� ������� Ü6¤ @3� � c����� ) � ��� "�� ������"� ���)"� �� �� �s� ipqJkp�s� ipq 5?@8 %�� "� �&��#� �� "��#�#� 2��Dâ7� �������� �������� ��#"�� � d ��� ���� "�� ���������� �� ��"���� � ������� :"����� � �������� + ��)"���( � �������� + � � �< �� "����������� ���� ��� $�� ������ ���� �"�� #��� %� ���)����""� ��� �� " ������ ��� �"�� "��# � ��À ��� � ��$�� �����#����� ��� � �"����)"�� �c� �� ����"�� %�� " ���$�� ����� �� �&� �� ����� �� "� ����� �� �&��#� �� "� �� ��"����� ��� ���������� � ����������� �� ���� �^ ���� � ��� ��������� ������� �)�������� �� � "� "��#�#� ����� ������� 0 Z3- �� �dSß�� ���� �� "��#�#� ��) "� �� ���� ������ �� � "� � ��#����� ��� ��0- � 4 ������� ������ " ���� ����� �� �"� �� ��"����� �(� ��� ����" T�""�� 5?A8 � 3" � ��� �� )"�� �� �#� %�� " ������" �&� ��� � �c)2 ������ �� "�� � ��� ����� ��� + ��� �" $��� ���� �"�� %�� "� �� ��"����� ����$ � �c)2 ������ �� " ��� ������� ������ ���""�:�� %�� �������� "�� ������&��#�� �����������< � d��� ���� %�� � ��� "� �"�� � ��� "� ���� + �� "� �������������� " ���$�� ����� �� �&��#� ������� ��� � ���� ��������� ���� "�� "��#�#�� ����� �������� ��������$� � ���$���"���� "� ���������� �� ���� ���� "�� ������� �)�������� �������� � -� ���( ��&�� ��� � ��� ���� ����� � ������ ���� "� ����� �À "� �� �"�( ��� �� �&� ��� � �c)2 ������ �� " �� �� ��������� ���%�� �����""�������� '[ 7 �;> ' ���)�"������� �� " ��(������� �)2 ��[ 6 �;; ' "�) �"� + �������� 5@?8 + � � �[ 6 �;@ ' ������� � �"& ������[ 6 �;A ' ���"�� ����""� ��� �������$� + �&� �� ������ ��� "� $��� �� ��������� ����� ��$�� ����� �� �&��#� ���� "�� ��,������� ������ �� ���������� �� ���� � �������� $����� "� ���������� �� �&� ��� c)2 ������ �� " ������ �� � �� ���� �� �"�(� ��� "�� �2 ���� ������� �4 ��� � ������� ��� " ���$�� ����� �� �&� �� ��"��"�� "� �� ��"����� � ��� ���� ���������� � � ���� "� ��� � ��� "��������������� �&�� �%�� �� �&� �� �� � �������� ��#� =A %�� ��������� �� �����b��� " ���$�� ����� �����%���� �&� �� ����� �� "� �� ��"����� � ��� ������������ �&�� �%�� ��� "� �&� � ��� ��"���� ���� �������"���� ����"� ����� �� $�������� � �"& ������ � Z��"� "� �� )������� �� " ���$�� ����� �����%�� �� �&� �� ���� "� ��������� � ���� � ���� ��"��� :�� )��� "� ������������ � ���� ������ �� " �� ������� �� ��"��"< � �� �� �� ����� ���� "��&� � � ���� ��"��� � �� %�� �������� ��� �(�"������� ���� � ��� "�� ����"� �� ��� �� � ���� %�� � ��� #��������� ������ � �� � ���������� �*� �

Page 39: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

6; |}~����� �� |�����~���� �� ��

Page 40: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

j k lm nopq î

ïð ñòó ôõöó ô òñ ÷öø ù õúûñõö ó üòýô þ

ÿ� � ���������� ��� � ������ � � ����� ������ � ���������� � ����� ÿ�� ����� �� � �� � � ��������� �� �� ���� ������� � �� ���� ���� ��� ��� !"# � !!# $ %�� ��� ��������� ��& ���� ��� � ����� ����� ����������� � � � ����� ��� �� ��� '��� ���� �� �� � (� � ��� �� � ����� � �� �� ����� � � )��� ����� $*� �+�� � � � ��,���� ��� �� ��� � � � �� ����� � �������� �� '���� �� � - ./01 2 �� � �� ������������ ���� $ ÿ � �� � ��� � � ��,� ���� ���'����� ��� �� �� ����� � ������� � �� � �� �� - ./01 ��� ��� � �+��� �� � ����� � � ��� �� �� �� � � ���� �� �� � � �� '� ���� $ 3 �� � � � ��� � �ÿ�� ����� �� � ��� � � ���� �� � ���� ���� 4

5 ÿ �� �� 67# � � � � ��� ��� �� ��� �� � �� � ��� �� ������ ������� ����� � �ÿ�� ����� �� � �� � �������8 $9" 2 : $9" � � �� ��� ������� ����� �;� ��� �������� : $9! $

5 <� � � "!# � � ��� �� � � �;�� � = >[email protected] BCD ����� ÿ�� ����� �� � ���� � �����;�� �� ����������� � ����� 899: � � ��������� �� � � 8999 � �� ��� ��� �� � ���� ����� � � �� �� ����� � ÿ�� ������� � E$9F G�� ������� EHHFI $

J� ������ ��& ��� �� ����� �� ����� � ��� �� ������ �������� G������� �� � �� � I ��� ���������� 2 �������� ���� $

K� � �� � ����� ��� �� �� ����� ��� ���������� ���� � ������ � � ÿ�� ����� �� � � � ���� 2 �� ������ ���� ������ ��������;� �� �� L M � �� � � � � ��� �N��� �� �� ���� $ % �� ��������� ���� �� ���� � ���L M �� ������ �� ��� �� ������ �������� ������� �� ������� �������� $ M �� ��� ��� ��� !"# � ������� ��� ��� ������� : $9: � ������� ����� � ����� '� ���� �� ��� � � � �� ������ ���������� $

ÿ� �� � ����� �� � � ��� �� ������� � �� ����� � � ��� � ����� O�� ������ ��� �� ���)� �� * 3 J�P � � � ��� ���� ����� ��� ���������� 2 O�� $ ÿ� �� ���� � ������ � � O�� �� ����� ���� ������� � � ÿ�� ����� �� � �� ������ $ ÿ� � � �� ��� ��� ��� O�� � � ����� � � ���������� � ������������ �� '������� �� ��� �� �� ��� �� ��� ����� $ �� ����� ��� ������ �� ������ �� P���)QR���S ����� �� T����� P �� ���� �� � ��� �� � �� U V 3 �� ����)���R��W� $

ÿ� ����� � � ���� � ���������� � � � �� ����� ÿ�� ����� �� � � �)� (� � $ K� � ������ �� ��� � ������ ��������� �� ����� �� ����� � �� � ������� ?@D/.@ 0l>X ����� ��� ��� ��� �� ��� ����� $ K� � ������� ��� � �;�� ��� �� � �ÿ�� ����� �� � �� ������ �� ������� �� m>[email protected]/ ����, �� ��� �������� � �������� �� ���� �)����� $ ����� ����,���� ���� �� � �� ��� �� ��� ������� � � � �� ������ � �� � ���� � �*�� 3 ��� �� ��O� Q ����� � �� � �������� ��� �� �Z�� $

����� ������ � ��� ��� ��� ������� � � � ������ �� ��� ���,�� �� ��������� ��)����;�� � �� ���� �� �)T ����� ������� �� EHH! �� �������� T���� �� � � �� � $ ����� �� �������� ��������� �� � ���,�� ���'����)� ��� � � ���� � ���� ���� �� �� �)M ���� ���� � � �� �� ����� � $ M�� �� �� � ����� �� ������ � ��������� � ��� ��� ÿ�� ����� �� � 4 ��� ��� ��� � ������ � � � �������� �� ��� �� � ������ ���� � ����� 2��� ��� ��� ���,��� �� ������� � ������ ���� �� �������� $ �����)� ������� �� ����� �� ���� �;�� �������������� �� S� �� S � �� ���� ��� Q ����� �� � � �������� $

: E

Page 41: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

:8 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

l mn opq pr s t

M� ����� O�� 76# � 8:# ��� ��u �� � ������ ����)���R��W� �� EHHF � � � � �������� � � ������� ��������� � � J������� G ��� ��� �� ��� ��� ��� � � � ����� �� ������ � ��� ����� �� *)��� � ��� 2 �� )� ������ :3 �� ��� �� � � ��� ���� �����I $ K� � � � ���� ������� ���� ���������� ��� �� � �� ��� ���� ����� ���� � '��� � � � � ����� �� ������ � ���� ������' ��� � �� �� � ������� � �� �� ������ ���P KJ � ���� ��� $ � ���� �� ������ ��� ���� 2 ���� ��� ������ �� v U L M � � ��� ������ ��� �;��� :3 ��� � ���� ��� ��� � � ���) ������� �� �� � � ��� � � �� K �� E"8# $

� ���� 2 ����� �������� � ��� ���� ���� ���� �� � � ��������� � � � �;�� '��������� ��� � � � � ������������ ���� � ��� �� � ��������� �� ����� � ��� � �� ���������� � � ��w � ������(� � ��� � ���� $3 � �� ����� ��� ��u �� ���� �� * �� G*��������� ��� �� 3 ������� �� ��� J������' G���� � ���I� � � � ��������� � �P ����� ��� ��� � ����� ���� ���I � � ��� �� ������ U x y M z �� ���� 899 E$ O�� � ���� � ���{��� ��� � ����� ������ �� �������� �� ��� � � ������ ���� ��� $ K� � �� � ���������� O�� ���� (���������� � �� � � �� ��� ���� � ����� � �)� (� � � � ���� (��� �� �� � �� �������� �� '� ���� ��� � ������ ������ � ���� , ���� �� � ������ $ P )���2 � ����� � � ���������� O�ÿM �� ���� �� � ��� ����� ��������� � ������ ���,���� ����� �� � � � | � � ���� } ��� ������ ���� ��� �������� �� $ M� ���� �� ������ ���� � ��� �� �� � �� � ������ 4 � ����� ���� ������ � ����� �� � ��,������ � � � ���������� ��� ���������� �� ��� � � � � �������� ��� ����� ���,���� $

ÿ ��� � ��,������ � � �� �� ����� ��������� �� � ���������� O�ÿM � ��� ����� ���,���� � � ����� (������� ��� ��,��� �� ��� ������ �� �� ����� O�ÿM � ������ ��� ������ ���� ��� �� � ������ $ ��� ��� ������ ��� � ���� � �� ���� � ���� � � ��� � � �� � ����� � �� � � ���� � �� � ��� ���� � �������� � ���������� �� ������ $

K� � �� � ���� �������� ��� �N��� ��� ��+ ������� �� �� �� � ���� �� *�� � �� ��� ����� �� ����� ��� � �������� � � ��� � ����� O�� ��������� ��� � � � '������ � ��������� ��� ���������� �����O�� ���� �� ��� �� ���� �� $

�� �������� � �� �� � �� ����'��� � ��� ���� ����� � � � � ����������� �� �� �� � ������ �� �� ���)��� � ���� ����� O�� $ O�� ����� ����� ���)2)� �� � ���� �� � �������� �� ����)���R��W� ������ 2� ���� ��� �N��� �� ����;�� ��� ��� ��+ ������� �� �� �� $

ÿ� �������� �� � � �� ��� ��� ��������� �� � ��� ������' � ����� O�� � � � ������� ������ ���� � ������� � ~�� ��� � $ ��� �)� ��� ����� �� �� ������� ��� ��� � � � '������ ��� ������������� � � ���� �� � � � ����� � � � ������� $

� ���� � ���������� �� ������� ����M� ����� O�� ��� � ����� �� � ����' �� ������'� ��� � � �� �� �w ���� � ��� � ���� � ��� ��� ���

��� �� '������������ �� � � ��� �� � ����� � �� �� � ���;�� �� �� ��������� �� ��� �� '������� �� ���� � �� � ����� � � �� '��� � �� ���� � � � � ��� �� �� ��� �� '������������ $ � ���� � ����� ����� �� ������ � � � ���� ����� ��� ����� � �� ��'����� �� ��� �� 2 ��� ���� �� � ����� $ M� � ���� ������� � ��� �)���� � � ����{� � � � � � ��� �������� ������� �� '������� �� ��� �� � � � � �������� �� ��� �� $ M����,������� �� ��� � ������ ��� ��� ��� �� ���� ��� G����������� ����I �� ��� ��� �� ��� � �� G2 � L M I $ O�� ����;� ��� ��� �� ���;��� ��� ��� �� �� ���'� ���� �� !8# $ M ����� �� � ������ ������ ��� � � ��,����� ������ ���� ������� � ��� ���� � �� ��� �) ����� $ y� ��� ��� ������� G������� � �� ��� � ��� ;���� � � ���'�I � � ����(��� � � ��,��� $ *� ������ �� � ��� �� �� '������ ��� ��������� ��� � ��� �� ������� ���� � ��� ��� � �������������� � �� , ����� �� � ���'� �� ��� ��������� $ J� �� � ���;�� �� �� � ����� � � ���������� $ K� � ����� � � � ��� � � �� � O�� ��,��� �� ��� � �� ���� � �� $

P ���� �� � �� � ������ � O�� ��,��� ��� ����� �� �� �� �� � ������ � ��� ����� �� �������� �� � ���� �� � 2 �� '������ ������� $ M� ��� ��� �� � � � � ���� �� ������ $

������� � �� ¡¢�£ ¤�� ¥�¦§¢¡£¡�  �� ¨¡�  ¦ �££�� ©ª «¡¬­ � ¤��¬�¤�� ¤�� £�¢����� «¡¢¦� ¡¢¢�£� ©

Page 42: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d® d g [ h [] i j ::

% � ������ � � O�� ��� �� � ��� �� ��������� ������� $P ,�� O�� � ��� ��� ��¯ ���� �� L M � M��� �� J� EEE# $% � ������ � � O�� ��� ���� ���� �� �� ��� � �� ���� �� ���)� ��� � �� � � ��)���� ��� ���������� $

M � ���� ���� ���� ��� �� � ���� 2 ���� $ ÿ ��� � ��������;�� �� ���)� ��� � ��� ���������� ��� � ���� )���� � ���;�� � ����������� �� � �� ���� GQ � I � �� �� ��������;� � � ���� ���� ������� � ������� ����� � ������� $

O�� �� �������� ��� � ������� |ÿ� �� O� ��}° $ O �� � � �� �� �������� � �� ������ � �� ���)����� ± � � � ���� � ���� ���� ���������� $

��� � � �� ����� ��� |� ����}� �� �������� � ��� � ��� ��� ��������� �� ��� ����������� �� � '��� �S x T² � � � ��� ��� �������� � ��� ���� � � ����� $ M�� ,� ��� 8 $E� 8 $8 � 8 $: �������� ���� ������ ��� ������� ��� ��� �� � ��� ��������� ������� �� ��� ��������� ����������� � ����� O�� ��� � ����� ��������� ��� 76# $

O�� ������� � ��� ��������� �� ��� �� ������� �� ������ �� ��� � ³� G´µ�¶I ��� ��� �� � ���� ������G´µ�¶� �� �I � � � ��� ���������� �� $

Type4 4·

B | un | rn

| tabType | [ Type ∗ ] | fun [ Type ∗ ] Type

TypeMono4 4·

B | rn

| tabTypeMono | [ TypeMono ∗ ] | fun [ TypeMono ∗ ] TypeMono

��B

· y�� � �� ��� �un

· ������ ���� ��rn

· �� ����� �� ���� �¸ ¹º » 8 $E 5 3 �������� �� ��� ��

M�� ��� �� |��� � ���} ���� ����������� �� ��� �) ����� 4 ¼ ½ ¾ ¿ ������ ��� ��� � ��À Á Â���À � �ÿ�)� ����� �� � $ M�� ���� � �� �� ����� ����� ��� � ��� ��� �� ����� � � � ��� � � � � � ����������� � � ���� � |���� �}$ ��� � ��� �� �� ��� � �� �� ����� � � �� �������� �� ��� �� ��� ���� 2 ������ � ������ � $ K� ���� ��� ��� ������ � � ���� (��� ������������ �� � � ��� ���� �� ���� ��� ���� ��� ��� � �������� �� �� ��;� � � ��� � ��� $ M ����� ���� ��� ����������� �� � ��� � � �� $ %� ��� � � � � �� ������ ���¼ ½ Ã Ä ¿Å $

M�� ��������� ������� �� O�� �� �������� ��� �������� �� ��� �� GÀµ�¶� � ~Àó �À �� Àµ� ¶Æ¶ÂI ��� '������� G³�I � �� ������� GÇ�à I � �� ����� �� �� �� �� � ������ Gƶ ��� �� ƶ ���Ç�ÃI �� ������������ ����� G�à �À �I $

Scol4 4·

Definition∗Definition

4 4·fun Function ( Args ) = Program ; ;| typeof V ar = TypeMono ; ;| var V ar = V al ; ;| struct NewType = [ Fields ] Function ; ;| typedef NewType = TypeConstr ; ;| defcom Com = string {I,S} ∗ ; ;| defcomvar Comvar = {I,S} ∗ ; ;| proto Function = Type ; ;

¸ ¹º » 8 $8 5 3 �������� ������ÈÉÉÉ ÊËÌÍÎÏÐÑÌÎÒÐ ÊÓÐÔÕÉÉÉ ÊËÏÌÖ×ÔÐÏØÓ ÌÖÌÒÙÐË ÊÏÌÚÛ ©©©Ü �Ý� Þ�£�¢� �� �ßà� áÙÓÔ â ãä å äË ãä ¤ æçèé �¦� Þ� ê�­ £ ©

Page 43: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

:" [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

O�� �� ���� ëÃ�ìÃ�� �� ���� � � �� '������ $ ÿ ��� ��� ����������� ����� ���� �� �� ����� �� � ��� ��)�� ��í� � ��,�� �� ��� ����������� ���� �� ��� ���� �� � �� �������� ��� ����������� � ������ 4 ��������� � �� '������ � �������� �� �� � � � �� � � � ��,���� ������ � � � � �) ���� � �������� � � �� ��� � '��)��������� �� , ����� �� � ���'� $

Program4 4·

Expr | Expr ; Program

Expr4 4·

Arithm | Arithm :: Expr

Arithm4 4·

A1 | A1 && Arithm | A1 || Arithm

A14 4·

A2 | ! A1

...

A64 4·

Term | − A6 | A6

Term4 4·

( Program ) | ( Program ) ;| { Program } | { Program } ;| int | ‘char | nil

| string | [ Arithm∗ ]

| V ar(.T erm)∗ | set V ar(.T erm)∗ = Term

| V ar(.NameOfField)∗ | set V ar(.NameOfField)∗ = Term

| Function ArgsFunction | @ Function

| let Arithm − > Locals in Arithm

| if Arithm then Arithm else Arithm

| while Arithm do Arithm

| mutate Arithm < − [ {,Arithm}∗ ]| exec Arithm with Arithm

| Constr Arithm | Constr0 | match Arithm with Case

¸ ¹º » 8 $: 5 *����������M �;��� � ��������� ��� '������� � �� � �� ��� � ��� ���� �� � ��� � � �� �� �w � ���������

����� �� ������ � ��� � ���� ����� �� ��� � �������� $

î ïðñòðóôõö÷ ø ðù úïöñòö÷ öñûïö üòýõ öû þÿ � öòûð�ö �ô� õM ����'��� ���� � � � ������ � � O�� �� � ������ � � ÿ�� ����� �� � �� ������ �� �� ��� 2 �� �������

��& ���� ��� � � �� �� �w ��� �� � ������ ��+ ;���� � � �� ������ � � ����� $ M�� ���� ������ ��� �� ��� � ������� � ����� ���� ��� � ������ 4

5 ����� 4���� � � ��� �� � ������ ������ ��� �� ����� �� ��� �� ��'����� �� ��� �� �� � ���� ��������� ����� �� � �� ����� O�� ������ ������ ��� �� ��� ��� ��� �� ���� �� G�� ������ ������ � ���I � � � � ��,������ �� ��� � ��� �� ������� ���� �� �� $

5 ������� 4�� ��� ��� ������� O�� ���� ������ �� ��� � � ��, ���� 2 �� � � �� ��� �� � ���� ����

5 ��� � 2 �� � '��� � �� 4� ��� � � �� �� O�� ��� ������� �� � � ��� � �� ��' � � � � �� � ��� ��� �� � ���� � � � (������� ���� �� �� �� '������ ���� �� � � � � �� � � �� �� (��� ������� �� � � �� � ������������ $

Page 44: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d® d g [ h [] i j :!

5 �� O�� ��� �) ����� � � ���� ��� (��� ������ �� ��� � ���,��5 O�� ������ ��� ��������� ����� G- �>/>I �� '�������5 ����� ��� ���� �� � �� �� ������� 2 � �����5 ��� ��������;� �� �� ������ ��+ ;���� '����� ������ ��������� ��+������ � ������� � � � ��� ���� � ��� ��� ��& ���� ��� ���� � ����� � �

��� ��� �� ������ �� ��� � ���, ���� $

� ���� � ������� � ��� M� � � �� � �������� � ��� �� � � ���� ��� ���� ����� ��� ���������� ����� �� ��� $ M �� ��� ��� ��� ���

��� � � '��� ����� � �� ��� � ����� � � ���������� �� ��� � ��� $ M ��� � ��� �� ����� �� ~�� ��� ���� ��� � ����� ��� � � � $

þï�ôñð÷ôûðýñM�� �� ��� � �������� � O� � � �� ��� � ��� �� �� � ������ 4E$ �� ����� �

5 ¶�Ç�~��� 4 ���������� ��� �� �� �������5 ���~��� �� � 4 ����� � ����� �� ��� � ��� O��

8 $ � �� �����;� � � ���� ����5 �³À �À ¶ �� 4 � � � ��� �� ������� ���� ��;��� �� �� ���� 5 ~ÀÆ�~��� �� � 4 ��������;� � � ���� ���� O��

M ��������� �� � ��� �� � ��� ������ � �� � ���� �� ����� � ���� ������ ÿ�� ����� �� � �� ����� �� ' �� � ��� �� ������ �� ������ �� � $

P ,�� �� ������� � />- B���B � � � �� ��� �� O�� 4�¡à £�Þ�£ �¦¡¦�­ £

� Ê�ËÏÌÏäÚ ÖËÏÌÏäÚ Ö � �ÏÌÖ ÐÓ � ã�äÚ Ö � �ÎÌ�ÐÔ ��ÙÏä � � Ê� Í ËÙÓÒ� �ÐÏÔÙ!Ð �äÚ Ö !ÐÎËÙÌÓ " Ê�#�äÚ Ö�$ %äÎËÙÓÒ !ÐÎËÙÌÓ " Ê�#

� !äÎ Ð � & ''!äÖ Ð � ÙÓÔ ÎÐÑ � (ÏÌÓÔÐÓÔË � &)� Ð * & ''× � ÙÓÔ � �� ÑÍÓ ä�� áä � å � ä * ''!äÖ ä�� � ÙÓÔ ×� ÙÓÔ ×� ÙÓÔ � +ÑÍÓ�� ä�� � " ''× � ÙÓÔ � ,� Ð-ÐÏ .ä�� É ÙÔØ / � " 0 ''× � ÙÓÔ � ,� �1Í ÙÔ ''

î ïðñòðóô23 ò4ýð3 ø 5ð�ó õôñûôûðýñÿ� ����� 2 ����� ��� � />- B���B ����� �� ������ ��� ������ O�� � �����)� ���� ��� ���� �� ÿ�)

� ����� �� � � �� �� ������ �� ��� ���� �� ÿ�� ����� �� � $ M� />- B���B ��� �� ���� �� � ��������;� �� ���� ���� O�� $

Page 45: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

:6 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

õö3öï M ��� � ��� ����� � ����� ��� ��,��� � ,� �� 8 $8 �� 8 $: ������� � � ����� ��� '������� ��������;� � ���� � ������ ������ $ K� � �� �� � � �� ��� ��� ����� ��� ���� ��� '������� � ����� �� 9 2 H $3 ;� � �������� �� ��� � � �� '������ ������ ���� 2 �� ���� ��� ��� ��� ������ �� ��� ���� $

�ïô�� ôðïö ÿ� � � �� �� � � � ����� � ������� ������ � � ��� ��� ƶ �� �À ��� O�� � � ����� ����� � ���� �� �� ���������� G������ I � �� �������� ���� ÿ�� ����� �� � $ �6�¬� � ¤� £� 7¬�­ ­ � ¬� �¦¡£

�ÎÌÒÎäÚ �// Ð � Ð-�Î ×� Ð8 Ð � Ð-�Î ' 9 '9 ' � � �ÎÌÒÎäÚ ×� + �Ð-�Î+ �Ì ÙÒÓ ÌÎÐ á:Ð:å ' :� : ��00'

Ð-�Î �/ ; <=>?@/ ä � äÎÙÔØÚ ×� ä8 ä � äÎÙÔØÚ ' 9 ��9 ' Ð � Ð-�Î ×� + �Ð-�Î+ á�Ô�AËÏÌÖ ÊÏÌÓ Ë :ä: :Ð:å��00'äÎÙÔØÚ �/ B�B@ / ä � ä & ×� ä8 ä � ä & ' 9CC 9 ' � äÎÙÔØÚ ×� + �Ð-�Î+ á�Ô�AËÏÌÖ ÊÌ� AäÓ� :ä: : :å��8 ä � ä & ' 9 889 ' � äÎÙÔØÚ ×� + �Ð-�Î+ á�Ô�AËÏÌÖ ÊÌ� AÌÎ :ä: : :å ��00'

ûDó ö÷ òDòõðE2ö÷ M�� ���� � �� ��� ��� ��� ��������� �� ��� � O�� ���� ��� ��� ���� ��� ��� ������ �� ÿ�� ����� �� � $ K� ���� ��� �� ��� � ��� ������ O�� � �� �� � � ��� � ���� 4 ¼³F à Ŀ �� ��� �� 4�ßà �� ¦ß¦£ Ý���� ÌÏäÚ Ö ×ÎÐÏÔG�ÐË� �ÐÏÔÙ!Ð �äÚ Ö !ÐÎËÙÌÓ " Ê�#� ÔG�Ð ãä Ó ÖÙËÔ � áãä â áãä Ó ÖÙËÔ åå ''ÔG�Ð ãä Ó ÖÙËÔ � ãä â ãä Ó ÖÙËÔ� ÖÐÔ ÏÌÓ Ë ä � ááä � å � ãä Ó ÖÙËÔ å ''!äÖ ÏÌÓ Ë � ãä ×� ãä Ó ÖÙËÔ ×� ãä Ó ÖÙËÔ � +ÑÍÓ �

öù öû÷ øö ÿ ýïø y� ��� ��� ������� ������� ���� ��� ��'������ $ M�� ������� �� ��� ���������� ��� �����'������ �� ����� ���� � � ��,��� ��� � � ����� �� �� � �������� � ����� ����� ��������� �� � ��� � $ 3 �� ��� ��� ��� ;���� �� '������� � �� � �)� ���� � ���,�� ��� �� ���� �� � '������ � ��� ��������� �� ��������� ����� 2 ��� ��'������ � � (� � ��� ���� � � ���� ��� � � ���� �� � '������ �� � �� ������ ��� ��� ;���� �� ��� � $ O� � ��� ��� ;��� ��� ����� �� ��� � �� �� 2 �� ��� '������ � �� �� ���� � ��'������ ��� ���� ����� $ ÿ� ����� ��� � ��� ����� � � ��� �� �� ��� � $

øúòõôïôûðýñ÷ ô�ôñòúö÷ M�� '������� ������� �� �à �À� ���� ��� ���� �� ��� ��'������ � � �� '������� � (� � ��� � �������� ������ ��� �� ��� �� �������� $ y� �� ��������� � � �� ����� '������ '�� �;� 2 ���� ��'����� $

ñ ðõ K� � �� � ��� �τ

�����,�� � ����� � �� � � �� 2 � ��������� ��� ��� �� � ��� �τ

� ��� � ���τ

$P ���� Ä H � �� ��� �� ���������� ���� ��� �� � � ���� ��� � �� $ ÿ� �� ����� �� � ��� � �� � ����� ��� �� � ������� �� ��� � ∀α.α

$ ��� �� ���� � � � �� ��� ��� '������� ������� ����� �� ��� �� ���� � ����� �� ��� � $K� ���� ��� � '������ � � ���� ��� � �(�� � � �� ����� � � � � ������ �� � � ��;�� � ����� 4

Page 46: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d® d g [ h [] i j :F

¢ £ÖÐÔ Ó ÙÖ � ÎÐÑ � ''ÖÐÔ Ø� áÓÖ � ãä Ó ÖÙËÔ å �

ÖÐÔ Ó ÙÖAÓ ÖÙËÔ � � � ÊÚ äÒÙÏ Ó ÙÖ ÙÓÙÑ Ó Ö �� Ó ÙÖAÓ ÖÙËÔ ÔØÐÓ � � ÊÚ äÒÙÏ Ó ÙÖÐÖËÐ Ú äÔÏØ ÓÖ É ÙÔØ á- �Aå ×� - ''

ôI ò4ô�ö 3 � �� � ��� � � �� �� ��� ��� �� ���� �� � � �& �� � � �ÿ�� ����� �� � �� � � � �� (��� ��)����� ��� �� � $ ÿ� � ���,� � �& �� � �� �� �������� �� ~À�����à ��À ¶Ã �� ������� �� ��� '������������,���� 4 ଠ¢��¬�Ð-ÔÐÎÓäÖ �ÎÙÓÔAËÏÌÖ � ãä ×� ÙÓÔ ×� ÙÓÔ ×� ã ×� ÍÓ ÙÔ � 9�ÎÙÓÔ 9 ''ÖÐÔ �ÎÙÓÔA!äÖ - �

�ÎÙÓÔAËÏÌÖ Ó ÙÖ & & - ''ÖÐÔ Ó ÌA�ÎÙÓÔA!äÖ - � áå ''

� ���J KL����������� ���������� � ������ � � ��� ����� ��������� �� � ������ 4

5 �� ������� � ���� ���� 4 �� � � ����� � �� ������ ��� � ����������5 � � ��� ����� �� ��� �� '������������ 4 �� � ��,������ �� '������� �� ��� � �����)� � � ���� (���

���� ����� �� � � ��� ��� � � �� '������ $ 3 �� � � �� � ����� ���� � � �� �������� ��� � '��)��������� $

5 �� � ���� ������� � ��� ����� � 4 �� � ��,������ �� ��� �� ��� ����� �� �� ������ � � � $M� � ��� �� �� ���������� ��� ���� ����� � � �� � �������� � ������ $

ÿ� �������� �� ����� ���������� ���� � � � ���� ��� �� ���� ��� � ����� �� M ��� $

N3òöóûðýñ÷J� � ����� �� ������ ����� ����� ����� �� �� � � � ��� ��������� � � � ���������� '����� ��� � �ÿ�� �����

�� � 45 � �������� � ���������� � � � � � ���� (��� � �� �� � � � ��� � ��� � � �������� �� � ���� ����� 4

÷Dñûô3ö 4 ¶O �¶�À ��� ����� �� � P P

5 � � ��� � � � �� � ���� � � ���������� 4

÷Dñûô3ö 4 Àõ ���������� Q �ÀR ,�����

5 �� �������� ��� � � �� �������� 4

÷Dñûô3ö 4 Ã� �~¶ ����������

ÿ� ����� �� ��� ��������� �� ��� � ����� �� 45 � ����������� ����� 2 Ã� �~¶ ���� (��� �� ��������5 �� ��� � �� � ����������� �������� �� �� Àõ ��� �� � (� � � � ��� ����������� � � � ��� ����� �� ��� ���

������ � ,����� ��� �� $M� ������� � � �� ������ ����� 2 ���� ��������� � ����� � � ����� ��� � ���� ������� 4

Page 47: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

:7 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

�6¦�à� ¡¢�S?�BT

�ÐÑÙÓ ÙÔÙÌÓ � U�V�U 9ÔÌ� 9// 9Ð-ÏÐ�ÔÙÌÓ 9 ' Ð � ÔG�ÐÏÌÓ ËÔÎ ã ×�ÖÐÔ áÏ �� Ïå � Ð ÙÓÚ äWÐAÏÌÓ ËÔÎAËÍÚ ÖÌÏ /Ð0 '+ �ËÔÎAÙÔÐÚ +Ð-ÏÐ�ÔÙÌÓ :Ï: ÌÑ :ÖÙËÔ �� Ï:��00'

äÎÙÔØÚ �// 9ÔÎG 9 ' ä � äÎÙÔØÚ ' 9É ÙÔØ 9 ' Ï � ÏäËÐ ×�+ �Ð-�Î+ ÔÎG :ä: É ÙÔØ / :ÖÙËÔ �Ï:0 ��8 9ÎäÙËÐ 9 ' ä � äÎÙÔØÚ ×� + �Ð-�Î+ ÎäÙËÐ :ä:��00'�BT ''

M ��� �������� ��� '������ ��� � � �� �� �w �� � ����� � � ��������� �� ����� �� ÿ�� ����� �� � �� � ��� , ����� ��� ���,� �� O�� ��� ��� 2 ��� �� ����� ��� �� �������� � ������ $

ÿ� ����� �� ���� �� � � �� � ���������� �������� ���� ��������� $ v��� �� ���� ��� ��� �� ����)� � � �� ���� ���� ��� 4

���� ¡¢� Ê�ËÏÌÏäÚ ÖÐ-Ô

ËÏÌÏäÚ Ö � �ÏÌÖ ÐÓ � ã�äÚ Ö � �ÎÌ�ÐÔ ��ÙÏä � � Ê� Í ËÙÓÒ�-ÔÐÓ�Ð� !ÐÎËÙÌÓ � Ê� ×@� �ÐÏÔÙ!Ð �äÚ Ö !ÐÎËÙÌÓ " Ê�#�äÚ Ö�$ %äÎËÙÓÒ !ÐÎËÙÌÓ " Ê�#

� Ð-ÏÐ�ÔÙÌÓ T Ù!A GAXÐÎÌ ''Ð-ÏÐ�ÔÙÌÓ T Ù!A GAXÐÎÌ� ÑÍÓ �Ù!AäÍ- áä � å �

ÙÑ á �� � å ÔØÐÓ ÎäÙËÐ TÙ!A GAXÐÎÌ ÐÖËÐ ä � ''!äÖ �Ù!AäÍ- � ÙÓÔ ×� ÙÓÔ ×� ÙÓÔ � +ÑÍÓ �� ÑÍÓ �Ù! áä � å �

ÔÎG �Ù!AäÍ- ä É ÙÔØ áT Ù!A GAXÐÎÌ ×� � å ''!äÖ �Ù! � ÙÓÔ ×� ÙÓÔ ×� ÙÓÔ � +ÑÍÓ�� �Ù! Y � ''× � ÙÓÔ � $� �Ù!AäÍ- Y � ''�-ÏÐ�ÔÙÌÓ � T Ù!A GAXÐÎÌ Ê

M�� ��������� ������ �������� ��� ��� ���� ���� �� ����� ����� �� ��� � ��� �� ������� � ���� ������ ������������� � ������ $

Zýñòûðýñ÷ õý òôõö÷ öû [öï� öû2ïö÷M �� � ������� � ����� O�� �� �������� �� � � � ����� '��������� � ����)2)���� �� � � � ������ ��� ��� ��� ��� �� '������������ G'��� �� ���I $ %�� ��� � '����������� � � � (��� ����������� �� � � � � ��� ������� �� � ����� � � � �� 2 ��� ��� �� � ����������� ��� ��� ��� �� � � �� � ���� �� $ *�

Page 48: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d® d g [ h [] i j :H

O�� � �� � � �� � �� � � ��� '������� ������� � �� ���������� ��� ��� �� � � �� ���� $ J� �� ���� ���� ���� �� ����� � ������� � ��������� �������� � � �� '������ 2 � ���� � ��� � ���� � ������ � � � �� �� � ��+���� � ������ '����������� �� ���� ������ $

K� � �� � �� �� ��;� � ��������� ��� �� ������ � � � ��� ����� � ��,������ �� '������� �� ��� $% �� ����� '������ � � � (��� ���� ���� �� � � ��� ��� �� � ��������� �� � '������ ��������� $ 3 �� �� � �� ��� � '����������� ��� ����� ��� �� � ���������� ��� � ����������� ��� ���)���� $

% �� '������ �� �� � � �� � ����� � � ��� � ����������� � � � � �� 4

÷Dñûô3ö 4 ³� ��� G��� \ E� $$$� ��� \� I ] ����������\ E �� ����������\8

M� �� �� � ������ � � � �� ��^ì �� � ,� �� 8 $" � ����� � � ��������� � � �� '������ �� �� ��� � ��,�������� � �� ��� � ����� '��������� ����� � $

_¦§ �¬ ­ �à ©à`7ÑÍÓ Ú ä� áÑ �Öå �

ÑÍÓ Ú ä� AäÍ- áÖ�å �ÙÑ áÖ� �� Ó ÙÖå ÔØÐÓ Ó ÙÖÐÖËÐ ááÐ-ÐÏ Ñ É ÙÔØ/áØ� Ö�å0 å �� áÚ ä� AäÍ- áÔÖ Ö�åå å

ÙÓÚ ä� AäÍ- Ö ''

ÑÍÓ Ñ áä � å �ÑÍÓ Ò á- å � - * äÙÓ

Ò ä ''ÑÍÓ ËÍ ÏÏ á- å � - * & ''

��  ��ÔG�ÐÌÑ Ö � /< Î &0 ''ÔG�ÐÌÑ Î � /< Î &0 ''ÑÍÓ Ú äWÐAÖ áå �

ËÐÔ Ö � á& ��� ��" ��Ó ÙÖå ''ÑÍÓ �ÌÙÔ áå �

Ú äWÐAÖ 'Ú ä� .AÑÌÌ< Ö 'ËÐÔ Î � Ú ä� .ËÍ ÏÏ Ö 'Ú ä� .AÑÌÌ< Î ''

¸ ¹º » 8 $" 5 3 ������� �� �� �� '�������

M�� ��������� �� ��� � ���������� �� ��� ��� ��'��� ����� �� ����� ��� ��������� ������� $ v����� ����� ��'��� �� �� �������� � � �� �� ,���� � �� ��^ì ��� ���� $ M '������ �� �� � ����³O � ���� ������� �� 2 � �������� � �� � '������ � �� � (� � �� � ��� � '����������� ������ ������ ��� ������� 2 �+�� �� �� ��������� �� � ����� $

�ßà�7� ¤� ­ �à ©à`7!äÖÍÐ Ú ä� � áãä ×� ã å ×� �Ô�AËÏÌÖ ÊÓ ÖÙËÔ ãä ×� �Ô�AËÏÌÖ ÊÓ ÖÙËÔ ã � +ÑÍÓ �!äÖÍÐ ËÍ ÏÏ � ÙÓÔ ×� ÙÓÔ � +ÑÍÓ �!äÖÍÐ Ö � ÎÐÑ ááÙÓÔ â ãä å äË ãä å � +ÑÍÓ �!äÖÍÐ Î � ÎÐÑ ááÙÓÔ â ãä å äË ãä å � +ÑÍÓ �!äÖÍÐ Ú äWÐAÖ � ãä ×� ÍÓ ÙÔ � +ÑÍÓ �!äÖÍÐ �ÌÙÔ � ãä ×� �Ô�AËÏÌÖ ÊÓ ÖÙËÔ ÍÓ ÙÔ

M ���� ���� � ����� ������ ��� 2 � ��� �� �� � '������ Æ��À $ �� ������ � � & �� � ����� � ������� ��������� ���� � � �� ����� � � '������ � �� � � ~³ �� �� � � �� ��� ��� ��� ���� ���� ��� � ����� à � � ��� ��� ���& ��� $

Page 49: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

"9 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

�6�¦�� ¡¢� �ÌÙÔ ''"�&$"�× � �Ô�AËÏÌÖ ÊÓÖÙËÔ ÍÓ ÙÔ �

M '������ � �� �� ���� � '������ �� �� � ����³O � � ������� ��� ��� ���������� ��� �� � � ����� ;��� '���������  � � � � ~³ �� ��� �� ���� ��� $

M2 ����� � ���������� ��� ���a ��� ��� ��� � � �� �� �w �� ����� �� �� Gÿ�� ����� �� �I ���� � ��� ��� ��,������ $ K� � � '��� � �� ����� � �;��� �à �ÀR �� � ��� � ��� O�� � ������ ����� � ����������� ��� � � ��,��� ��� 76# $

bDó ö÷ óôïô� úûïú÷ 2ûðõð÷ôûö2ï÷M� ����� O�� ���;��� �� ��'����� �� ��� �� � � � �� �� ��� � �� �� � ������ � � �� ���������� � � � ���������� $ K� ���� ��� �� ��� � �� � '������ �ƶ�À �À¶ � � ����� � �� � ��� �� �� ���� ��� ��� � ��� ���;�� �� O�� �� ��� � � ���� 4 ³� ¼³F¿ ³F ����� �� � � �� ��� � � ��� ;��� ��� � ����� � � �� �� ��� �� ��� ��� ��� � � (� � ��� � � � �� � � ��� ;��� $ ����� ������������ ��� ��� �� '�������� � � � ���'������� � �� �� � ���� �� � ����� �� ������ � � � �� ��,��� �� �� �� � ��� �� ��� ����� $ M ����������������� ����� 2 ������ O�� �� � ������� � $

M ����� ��� �� � ,� �� 8 $! ��,��� � ��� � �� �� ���� ��� ��;�� �w �� � ��� ���� ���� �� � ���� ���� � � (� ���� � 4 M ,� �� 8 $! ��,��� �� ��� � �� ������� � �� � � ��� � ������ ����� ��� � �� �� ���� ��

_¦§ �¬ ���¦` ©à`7ËÔÎÍ ÏÔ Ô+Í�� � / Ï � /Í� Î &0 0 ÚWÔ ''Ð-ÏÐ�ÔÙÌÓ �Ú�ÔG ''ÑÍÓ ÏÎÐäÔÐ áå � ÚWÔ Ó ÙÖ ''ÑÍÓ ÏÖÐäÎ áËå � ËÐÔ Ë ÊÏ � Ó ÙÖ ''ÑÍÓ ÏÌ�G áËå � ÚWÔ Ë ÊÏ ''ÑÍÓ �Í ËØ á- �Ëå � ËÐÔ Ë ÊÏ � á- �� Ë ÊÏå ''ÑÍÓ �Ì� áËå �

ÙÑ Ë ÊÏ �� Ó ÙÖ ÔØÐÓ ÎäÙËÐ �Ú�ÔGÐÖËÐ

ÖÐÔ Ø� Ë ÊÏ ×� Î ÙÓ áËÐÔ Ë ÊÏ � ÔÖ Ë ÊÏ ' Î å ''

¸ ¹º » 8 $! 5 3 �,������ � � � ��� � ��� ����

2 � � ��� �� � ���� $

M ������ ������ ��� � � ����� 4

÷Dñûô3ö 4 Àµ�¶ ��� c��� ��������� �d · ������������� �

3 �� � ����� ��� �� � ,� �� 8 $! �� ��� ;��� �� ��� � ��� ³F � ��� � �� ��� 2 �� ����� ��� � ���'����� �� ��� ��� � � ��� '������� O�� $

Page 50: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d® d g [ h [] i j " E

M ��,������ �� ��� �� ��� ����� ���� ��� ��������� �� ��� � ���� �� �� �� ��� � ��� � � �� � � ���� ����� ��� �� � ,� �� 8 $6 ��� " E$

� ���e KL�f � �� ��f � ���M ����� ��� �� � ,� �� 8 $6 � ��� " E� � ����� � � ��������� ��� ��+ ������� ���������� ��� � � (� � ������ � � $�� ������ � � ��,��� �� ��� � �� �� � � � ��� ��;�� ������� �� � ��� �� ��� ����� 4 � ��� � ��� � �� � � ��� ���� ���� �� � � � � Gg³ ¶³ ¶��¶��I �� � ��� � ��� � �� GÀ I � � � �������� �� ��� � �� � ,� �� �� � � $ M ��������� h��Àµ ��� ��,��� � � � ����� � ����� � � � ���� ��� ��� �� � � � ���� $ M '������ �À ¶Ã������� �� '������ �� �� �À ¶Ã��³O � � �+�� � � ��������� � � � ��� � �� $

_¦§  �¬ Ý���� ©à`7Ð-ÏÐ�ÔÙÌÓ �Ú�ÔG ''ÔG�Ð�ÐÑ 1ÍÐÍÐAÏÐÖÖ+Í�� � B ÙÖ8 �ÌÓ Ë / Í� 1ÍÐÍÐAÏÐÖÖ+Í�� 0 ''ËÔÎÍ ÏÔ Ô+Í�� � / ØÐä� � 1ÍÐÍÐAÏÐÖÖ+Í�� �

ÔäÙÖ � 1ÍÐÍÐAÏÐÖÖ+Í�� 0 ÚWÔ ''ÑÍÓ ÏÎÐäÔÐ áå � ÚWÔ /B ÙÖ B ÙÖ0 ''ÑÍÓ ÏÖÐäÎ á1 å � ËÐÔ 1 ÊØÐä� � B ÙÖ '

ËÐÔ 1 ÊÔäÙÖ � B ÙÖ ''ÑÍÓ ä�� á- �1 å �

Ú äÔÏØ 1 ÊÔäÙÖ É ÙÔØáB ÙÖ ×� ÖÐÔ �ÌÓ Ë /- B ÙÖ0 ×� Ï ÙÓáËÐÔ 1 ÊØÐä� � Ï ' ËÐÔ 1 ÊÔäÙÖ � Ï åå8 á�ÌÓ Ë G ×� ÖÐÔ �ÌÓ Ë /- B ÙÖ0 ×� Ï ÙÓáÚÍÔäÔÐ G +× / A Ï 0 ' ËÐÔ 1 ÊÔäÙÖ � Ïåå ''ÑÍÓ �ÐÐW á1 å �

Ú äÔÏØ 1 ÊØÐä� É ÙÔØáBÙÖ ×� ÎäÙËÐ �Ú�ÔG å8 á�ÌÓ Ë / - A 0 ×� - å ''

��  ��ÑÍÓ ÔäWÐ á1 å �

Ú äÔÏØ 1 ÊØÐä� É ÙÔØáB ÙÖ ×� ÎäÙËÐ �Ú�ÔG å8 á�ÌÓ Ë /- ÎÐËÔ0 ×� áËÐÔ 1 ÊØÐä� � ÎÐËÔ 'áÚ äÔÏØ ÎÐËÔ É ÙÔØáB ÙÖ ×� ËÐÔ 1 ÊÔäÙÖ � B ÙÖå8 á A ×� Ó ÙÖåå '- åå ''

ÑÍÓ ÖÐÓÒÔØAäÍ- á1 å �Ú äÔÏØ 1 ÉÙÔØáB ÙÖ ×� � å8 á�ÌÓ Ë / A ÎÐËÔ0 ×� & * áÖÐÓÒÔØ AäÍ- ÎÐËÔ åå ''

ÑÍÓ ÖÐÓÒÔØ á1 å � ÖÐÓÒÔØ AäÍ- 1 ÊØÐä� ''ÑÍÓ ÙÔÐÎ áÑ �1 å �

ÑÍÓ ÙÔÐÎAäÍ- á1 å �Ú äÔÏØ 1 É ÙÔØá B ÙÖ ×� Ó ÙÖå8 á �ÌÓ Ë / - ÎÐËÔ0 ×�áÐ-ÐÏ Ñ É ÙÔØ /-0 ' ÙÔÐÎAäÍ- ÎÐËÔ åå

ÙÓÙÔÐÎAäÍ- 1 ÊØÐä� ''

¸ ¹º » 8 $6 5 3 �,������ �� ��� �� ��� ����� 4 ��� � �� �� ��� � �

�� ������ � � ��� ��� �� ���� �� ����� �� �� ÿ�� ����� �� � � � ��';��� �� ��� � ��� ��������� �������� � � � �� 4 �ßà�7� ¤� Ý���� ©à`7Ð-ÏÐ�ÔÙÌÓ �Ú�ÔGÔG�Ð 1ÍÐÍÐAÏÐÖÖ ãä � / B ÙÖ 8 �ÌÓ Ë ÌÑ áãä â 1ÍÐÍÐAÏÐÖÖ ãä å 0ÔG�Ð Ô ãä � ØÐä� � ÚÍÔä ÖÐ 1ÍÐÍÐAÏÐÖÖ ãä ' ÔäÙÖ � ÚÍÔä ÖÐ 1ÍÐÍÐAÏÐÖÖ ãä!äÖÍÐ ÚWÔ � á1ÍÐÍÐAÏÐÖÖ ãä â 1ÍÐÍÐAÏÐÖÖ ãäå ×� Ô ãä � +ÑÍÓ �!äÖÍÐ ÏÎÐäÔÐ � ãä ×� Ô ã � +ÑÍÓ �!äÖÍÐ ÏÖÐäÎ � Ô ãä ×� ÍÓ ÙÔ � +ÑÍÓ �!äÖÍÐ ä�� � ãä ×� Ô ãä ×� ÍÓ ÙÔ � +ÑÍÓ �!äÖÍÐ �ÐÐW � Ô ãä ×� ãä � +ÑÍÓ �!äÖÍÐ ÔäWÐ � Ô ãä ×� ãä � +ÑÍÓ �!äÖÍÐ ÖÐÓÒÔØ AäÍ- � 1ÍÐÍÐAÏÐÖÖ ãä ×� ÙÓÔ � +ÑÍÓ �!äÖÍÐ ÖÐÓÒÔØ � Ô ãä ×� ÙÓÔ � +ÑÍÓ �!äÖÍÐ ÙÔÐÎ � áãä ×� ã å ×� Ô ãä ×� ãÏ � +ÑÍÓ �

O � �� ���� ��� �� � �� ��u��� ��� �� ������ � ����� ������ �� ������ � ���� �+����� �� �� ���������� $ ÿ�� � � ���� � � ����� � ������� ��� ��� ����� ���� ��;��� �� �� � ����� � � ���������� � � � ����� �� �

Page 51: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

"8 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

������� �� � ������ � ���� '����������� �� � � ��� ����� ��� '��� �� ��� � �� �� �� � ����� �������������� � ��� �� ��� ��� �� ��� ����� $

l ml ijklmonqm qop lk q rsrtuv wÿ�� ����� �� � � ���;�� �� ��������� ��� �� E87# � � �� ���� � ����� �� ����� ��� '������)

���� � ����' �� �� � $ % �� �������� �� ���� ����� �� � �� �� ��� � |��� ��} �� �� '������ ������� ���� � �������� �� � ��� � $ M�� ����� � � ���� (��� �� ������� � �������� �� �� ������� �� �� �)����� $ ��� �� � �������� ���� ���� ��������� $ M�� ��������� �� ����� ������ � �������� � ���� �� �� �������� ��� ������ $ K� ����� � � ����� �� � ������ � ���� �� ����� $ 3 � ���� �� � � �� � ���� ����� ������ ��� �� � � �� ������ $

J� ' � ��������� �� ����� ÿ�� ����� �� � �� � � � ����� � �� � � �� ��������� ��� �� �� ��� ���� � � � ����� 2 ��� ��� $ x ��� ���� ��N� 2 � ������ ������ �� � ��� �� �� ��� � ��� ��� �� � ������������� � � � �� ��������� 8"# $ L ��� �� ��� ��� ���� ��������� �� � ��� �� �� �� ����� ��� '���� ��� ������������ �� ����� �������� $ *� ���� ���� ������ � � �;��� �� �������� ����� �� 6F# �� � � ���'���� �� � ��� � � �;��� 2 ��������� 2 � Px y �� <� �� � � ���� �� (��� ��,��� $ 3 �� �� � �� � ���� ���� � � �� � ����� �� �� ���{��� �� ��� � �� � ���� ��� �� � ��� �� � � �� � ���� �� 4 �� � �� ��� � � � �� �����(��� ��� ��� �� � � ��� � � ��� ��� $ K� � ���� ��� � �����;� � �� ��� �������� � �� ���� �� ���� � � ����� ����� � �� ������� �� ����,���� ���� �� � �� ��� � �� � �� ��������� �� ��� �� Gm>[email protected]/I����� ��� ��� $

����� �� ����� ��������� � �� ���� ����y� �z G� � � |��� ��� �� �� � �}I ������� ��N� 2 � �� ��� ��� ��� !"# ������ �� |��} ���� �� � � ���� ��� � � �� ���� � ���� �� ��� ���� Æ �� � � �� ��� �� ��� � �� � ����Æ ��� ���� �� �)��� � � ��� � �� � ���� � �� � � ��� ��� �� Æ ��� ���� �� �� �)���� � ���� �� � �������� ��� � ���� �$ M ���� �;�� ��������� ��� ����,�� ����� �� ��� ����� � � �� � �;� � ��������� �������� �� ����,���� ���� �� � 2 � ���� ���� $ J� ������� ��� � ����� �� ��;� ���� ������� �� ��� � � � � ��� �� ������ Æ ���� �� � �)��� � �� � ���� � � �� � � ���� �� �� �� ��������� �� ��� �� �� � � �� ���� Æ � ���� �� ���� ������ ������ ����� � �� Æ �� � ����� � �������� $ K� � (��� �Z� � � �� ���� Æ ��� ���� �� �)��� ��� �� ��� ��� ����� �������� �� � ���� Æ �� ��� �������� �� �� ����,�� ���� � �� ��� �� � �+ �������� ��� ����� �� G| � ��}I � ���� � �� ��� �� � ��,������ �� � ���� Æ �� ������ � � ���� ���� ��� ���� �� �)��� ���� ����� ���� ���� ������ $ ��� �� � ������ �� ��� ��� �� ������� � �� ���� �����;�� ����� ���'������ ���� �� � ���,� �� � ��� ���� � � �+ �������� ��� G {dI � ����� �� � �� ���� �� � '��� 2 ������� �� ������ �� � �& � $

� �� �� |}������ �� �� ��~��� ��� �� ��� ������ ��f �M ��,������ � � �� ���� ÿ�� ����� �� � ��,��� �� ��������� � � � ��� � ��� �� �� �� '������ ��

����� ���� � �������� �� � ��� � $ % � ��� � ��� �� ������ ��� 2 �� � ��� �� ��� � �� � ���� ��� ��� ��� 2�� � ��� � 4

< m1 : τ1;m2; τ2; ...;mn : τn >

M�� ��� ��τi

� � ���� (��� '���������� � ��� ��� � �� ��� ��� �� ��� ��� � � ���� (��� �� ���'� �� ��� ����� $ M��������� � ������� � ���������� �� ��� �� ��� � �������� �� � ��,������ � � �� ���� $M�� �� � �������� ��������� ����� ��� ����� ���� 4

5 � ������� ��� � ����� � �������� �5 � ������� �� �� �)����� ����� ��� ��� �� ��� ����� $

S ��� � � ������ ������ ��� ��� ��'������ �� �� � �������� �� �� �� �� � ÿ�� ����� �� � ��� ������� � $�ÉÉÉ Ê�� Ë Ê�Í ËËÙÐÍ ÊÑÎ��ÐÚÚ äÓÍÐÖ�%Í ÖÙÏ�TÐ!�ÏÌÏä ×Ú Ö

Page 52: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� ":

� öõôûðýñ ø 54úïðûô�öM���� � �� ���� Æ ��� ��,��� �� ������� �� � ���� �� �� ��� ��� � ���� ��� �������� ��� � ����������

�� ��� � � ���� ��������� ��� � ���������� �� ��� �d

$ O� Æ ��,��� �� �� �� � ��� � �� � ������� � �����)����{����� ��� �� ��� � ��'��� $ O� Æ ����,��� �� � ������ ������� � ����)� ���� ���� �� � (� � ��� � � �� � ���� �� ������� 4 �� � �� �� �� � ����� �� ÿ�� ����� �� � $ x ��� ���� �� � ���� �� ����,��� � � �������� �� ��� � �� � �� �� ��,������ ��� |��� � �� ~¶�Â}$O �� ����� � � �� ��� � � ���� ��� ��'��� �� � �������� �� � ���� � 4

c =< m1 : α→ τ1;m2 : τ2 → α > as αÿ� ���� �� ��,������ �� ����� � ��� � $ �� � ���� �� � ��� � ��� ���� � � ������α

� ����{� ����� �� ���� � � �� �� ��� ���� �� �� �~ $

O� � ������� �� ����� �� ���� Æ � � ������ �� � �� � � ��,��� �� �� ����� � ������ �� �� ��� �int

��� ������� �� ��� � � ���� 4

d =< m1 : α→ τ1;m2 : τ2 → α;m3 : int > as α

M ���� Æ ������ ��� � ������� ��,���� ��� � � � �� �� � � �� � ���� ��� ��������� �� ��� � �� � �������G��� � �� ~¶�ÂI ��� �� �� ��� �� �� �)� ������ ��� ��� � Æ ��� � ��,������ �� Æ $ M� '�� � �������� ���� ���� ��� ������� �� ��� � �� ~¶� ���� �� '�� �� ��� � �� �� � ���� ��� ��� � � �� �� �w �� ��� � ��~¶� ���� $

üý2÷�ûDóô�öM ������� �� �� �)����� ��� �� ������� ��¯�� ��� �� ��������� ����� ��� �� $% � ��� � ��� �� � ·

< m1 : τ ′

1; ...;mp : τ ′

p;mp+1 : τ ′

p+1; ...;mn : τ ′

n >��� � �� �)��� � � � � ��� � ��� �� ·

< m1 : τ1; ...;mp : τp >�� �� � ��� ��� � �� � ������� �������� ���

c�������� ��� ���

d�� �� � ���

��� �� ��� � �������mi

G� � �i

���� ��1

2p

I ��d

���� �� �)��� � ��� ��� �� �� �� � (� �� � ������� ���c

$ ����� ������� ��� ����� ≤ $��� � � �� ��� � � � �� � ������ ��� � ����� � ���� ������� � ������ � 2 �� � ��� ��� �� � ����� �� ��� �� $M�� ��� �� �� ��� �� ���� �� �)��� � � � � �� �)� (� �� $ M ������� ����,� � � � ��� ����� �� �� Á G����I ��yd G'���������I ��� ���������� � ������ 4

5 ��τi ≤ τ ′

i

����(τ1 ∗ τ2) ≤ (τ ′

1 ∗ τ ′

2)5 ��(τ ′

1 ≤ τ1)��

(τ2 ≤ τ ′

2)����

(τ1 → τ2) ≤ (τ ′

1 → τ ′

2)M� ����� �� � ¯;�� ��� �)����� 2 ������ �� ����)����� 2 � �� $O��� � ��� ��

o�� ��� �

τ1� ��

τ1 ≤ τ2���� �� ��� � ����� �� � � ������� � ���� ��

o�� ��� �� ��� �� ��� �� ��

��� �τ2

$ ����� �������� �� ��� � ��� �������� ��� �� ����� ÿ�� ����� �� � �� � ������� � �� � � ��;��� ����� 4 �¶O�à { À �³ Ä {d À �³�� ����� �� � � �� ¶O�à ��� � ��� �

τ1�� ��

τ1 ≤ τ2���� ¶O�à ��� �

�� � � � ��� �τ2

$ % �� '��� � ���� �� � �������� �� ��� �τ2

� �� ��� �� � ����� �� �� �� ����������� �� � � ���� �� �� ��� �

τ1�� ��� ��� �� ���� ��+ ������ $

����� �������� �� ����� �� ����� �� ��� � ������� �� '�������� �� � ��+ ������� �� �������� ����� ��� ���� �� � � ����� $ P ���� ��� ��� �� �� ����� � �|+ �������� ���} � ��� � � ���� ��� ����� ��|� �)�����}$ O� �� ���;��� ��� ������� � �������� �� �� ��� �� �� � � � �� ������ |��������� ������} � | � ��}$

� úïðûô�ö ñ 5ö÷û óô÷ ÷ý2÷�ûDóô�ö��� �� � �������� ���� �� �� ��� ��+������� $ *� ÿ�� ����� �� � ����� �� ���� �� �� �������� � ��

���� ���� � �������� �� ������ �� �� �� �)����� $ ��� �������� ��� � ���� ��� �w ���{� �� ��� � �� ~¶�Â��� � ��� � '��������� �� �� � ����)����� 2 � �� � ����� �� � '��������� ¯;�� $

Page 53: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

"" [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

O� �� ����� �� �� ���� � ���� �� ��� � �������� ���c =< eq : ′a→ bool > as ′a

���� �� ���� Æ � ������� �� � �� � � ��,��� �� �� ����� � ������ � � ���� �� �� �)��� � �� � $ *� �+�� � � � � �

d ≤ c�� ' � � �

�� ��� � �� � � ���� �� ¶g �� Æ ���� �� �)��� � � ��� � �� � � ���� �� ¶g �� � $ � ����)2)����d→ bool ≤ c→ bool

$3 � �� � ����)����� 2 � �� �� �� ���� � � �

c ≤ d$ �� � � � ���� �� ��� � � � ������ � �� Æ

� ��� ���� �� ��� � $M� �� � � �w � �������� ������� � ������� �� �� �)����� �� ������� �� � ������� �� � ����� �� ��� �

�� ~¶� �� � ������� ��� ;���� ��� � �� ��� ��� �� ��� ����� ���� ������� �� $ K� ����� � �� ��� ������� � ���;���� �� �� ������ � ���� ��� � ���� � �������� ����� ���� ��� � ������� �� �� �)����� $� ���� � ���� ��� ���� ��������� � � � � ��� ����� �� ���� ���� �� ��������� ����� ÿ�� ����� �� � � � �'��� � m>[email protected]/ � � ��� ��� ��� $ ÿ� ��� �� �2 ��� � � ��� �� ��� ����� �� � � ��� ���� �� �� |�����������������}� |�� �)�����}� |�� ��������� } � |���������� ���} � ����� |���'���� ���}$

� �� �� KL������� ��� M� � � ������� �� � ���������� ����y� � ��� � � ������� �� m>[email protected]/ ��� �� ��� ���� �� ����;� � ��

��� �� � ����� $ ��� �� ���� � �� ������ �+�� �� �� ����,���� �� ��� � 2 � ���� ���� $ M ���'��� ���� ����� �� � � � ������ � � ÿ�� ����� �� � ��� � ��� � �� '��� �� ������ � � ������� ��� ��� � $ ��� ���������� �������� � � ���� � � ���'��� ����� � � � ���{��� � ���� �� ����� ���� � � � ��� �� � � ������)��� � � �� ���� 2 � ���� � �������� �� ����� �� � ����,���� �� � ������� �� �� �)����� ����� ����� $

ÿ� ������ �� ���� ��� �� ���� �� � ����� 45 ����� 4 ����� � ���� �� ����� ���� �� � ���� �� � �5 Æ 1 ��?/� m� � 4 � � ����� � � � Æ � � � � ���� � � Æ � �� � � �(��� ��� � ����� � �������� �5 Æ D>CDA1 ��?/� m� � 4 �� ������ 2 Æ 1 ��?/� m� � ��

d ≤ c$

M ������� �� �� �)������� ��� ���� ��� ��¯�� ��� �� ��������� $K� � � '��� �� � ���� � ���;�� �� �� ��� � �� ��� �

id�� � '��� � � � �� �������� ������ ��

�� � �������� �� ���� � � �� ��� ��� � ������� �� � ,� �� 8 $F ��� �� ���� �� � ���� $� ���� �� ��� � ����ì¶À��Æ

id���� ��� � �� �� � ���� �� ����� ����

�R¶ �^��Æid→ bool

����� �� � ���� �� ����� ���� �� � ���� ����� ������� � 2 � ��� � ���

�R¶�^��� ~À �� �¶�Â��Æid→ bool

����� �� � ���� �� ����� ���� �� � ���� ����� �� �� �)���� �� � ��� � ��� �

�R¶ �^�~³� �� ~À �� �¶�Â��Æid→ bool

����� �� � ���� �� ����� ���� ��� �� ��������� �� �)������� �� � ���� ���� �� �� � ���

�R¶�^�~³� ���~~id→ id→ bool

����� �� � ���� �� ����� ���� � � � ��� �� ����� ������� �� �� �)������� �� �� ���� ����� � ��� �� � � �� �)� �� �)������ � ����� $

¸ ¹º » 8 $F 5 L ���� ��� � � ����

M ����� �������� �� ����y� � ��� � � ������� �� �������� �� ��� � G|��}I � � � ��� �� � �������� �� � � � ��� �

c� � �� ���� � ���� �� ��� �

d� � �� ���� Æ �� ����� D>CDA1 ��?/� m� Æ $ ÿ� ������� � ���� �� ��������

�� ��� � ������� GC- 0.D/I � � ����,� ����� D>CDA1 ��?/� m� � �� � D>CDA1 ��?/� m� Æ � � �� �������� ����� � ��������� Gm>[email protected]/I � � ����,� ����� D>CDA1 ��?/� m� Æ �� Æ D>CDA1 ��?/� m� �$ M �+ �������� ��� ����� � � � �� �������� ������� �� ���� � ��� �� ����,�� � ������� �� �� �)����� � � � � ��� �� � ��� ������� �� �� �)������� � � �� ���� �� + �������� ���� � ����'� �� �� � �������� ��� �� � ��������� �� �)������� $ M� ���'���� ��� �� ��� � � � �� �������� ��������� �����;�� � ���� �� � ��� � �� �

Page 54: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� "!

���� � �������� � �� � �+ ����� ���� � ���� �� �� $ J� ��� 2 ����� � � � � ���� �� � � ��� ��� �� �� � ����� � �� ������ � �� ��������� �� ��� � � � � ��� �� ���� �� ��� � �� � ���� �� ����� ���� $ ��� ������� �������� �� �� ��������� �� ��� �� �� ���� ���� � � � � ����)����� $ M ��� ���� � � ���� ��'���� ��� �������� � � � �� ������ � � � �� ������� � �������� � ���� �� �� �� � ��� ������ �������� � ��� ������ � ��� ���� � � �+ �������� ��� � �� G {dI $ 3 � �� � � � ����� � ��� ������ ��� ���� �� � �� �� ����'���� '���� ��� �� ������ � � � ÿ�� ����� �� � � � ������ � ��� � ����� ����� � $ K� � �� �� ������ �������� � ������ �� � ��� ���� � �� � ���������� $

üDñûô3ö öû ÷ú� ôñûðE2öM ���������� ����y� � � � �� ����� � �������� ����� ��� �� �� ����� ����� 45 � ������� �� �� �)������� � � ������� � �� �� �� � ��� ��� � ��� �� ���� �5 ��� ������� ����, �� ��� ���������� �� � ���� �� ����� ���� � � � ��� �� �� ��� ��� 2 �� ����

���� ��;�� �5 ��� �� ���� �� �� ��������� �� ��� � � � ������ �� ��� � ����� � � � � ��� �� ��� � ���,�� � �����)

�������� $

� öõôûðýñ øö ÷ý2÷�4úïðûô�ö M ������� �� �� �)������� G� �� �� ~³� ��R¶Ã �ÀI � ��� ����� �� � � (� �� ��;�� � � � ������� � �������� G��R¶Ã �À I ��� �� ���� �� � ��,������ � � �� ���� 4 ~³� ��R¶Ã �À �

arg1$ $ $argn

$M ���� �� � �� �� ��,������ ������ �� � ���� � �� ��� ��� � ��� �� �)��� � ��

c$

î ïúø ðòôû÷ ÷2ï õö÷ ïöõôûðýñ÷ ÿ� ��,��� ������� �� ��� ����� ������� � � ����,��� � � � ���� ������� ���� � � � ��� �� ��� �� ��� ��� 2 � ���� ����� �� ��� ;��� ���� ������ ��� |������� �}� |�� �)����} �� �� ������� �� |�� �)�������} �� � � �������� 2 � ,� �� 8 $7 $

¶O�à � �Ä ¶O�à �� ~À�� �¶� �Ä ¶O�à ~³� �� ~À�� �¶� �ÄO����� Eí ¶O�à ��� �� ����������

8í �Ä ��� � ������,�� � �� ����y���� Eí ��� � �� ¶O�à 4

< nom\

methode : id→ bool >�� ����� ¶ÀR�ƶ

�R¶�^��Æ �R¶�^��� ~À�� �¶�Â��Æ �R¶ �^�~³� �� ~À �� �¶�Â��Æ8í �� ��� � �� � ������ ���� ���

bool*�� ���� Eí ¶O�à � � �8í �� �� �� � � ���� ���R¶�^��Æ �R¶�^��� ~À�� �¶��Æ �R¶ �^�~³� �� ~À �� �¶�Â��Æ� � � �� �� � � �� � ��� � �� �� � ���� �Ä

¸ ¹º » 8 $7 5 K������ � � ��� ����������� ������� �� ������ �� �� ��� � � � � ��� �� � �� � ��� ������ �� ����,�� � � �� �������� �� ��� � � � ��� ������ �� � � � ��� �� $

�ñ÷ûï2òûðýñ÷ øö òýñûïôðñûö øö ûDó ö M�� ����� ����� �� �������� �� ��� � � � ��� ��� ��� �� � � ��,����� � ��� � �� � ���� �� � � ��� �� ����� � ������ ��� � �� �� '����� 2 (��� �������� � � � ��� ��� � $ * �������� ���������� 2 � ,� �� 8 $H $ *� � � ���� ��� ����,����� ��� �������� �� ����� 2 � ���� ���� � ���������� ��� �������� $M ���� �;�� ����� ���� G��~À ¶O�à À � ÆI ��� � �� � ������� $ * ��� �����;�� � ����������� ¶O�à �� � � � ��� � �� � ���� Æ �� ����� 2 � ���� ���� � � � ���� �� ����� ���� �� � ���� �� � ��� ��� �� � ���� ���� ��

Page 55: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

"6 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

��~À ¶O�à À� Æ ³� ��~À ¶O�à Âà �� � À� Æ Æ�Q� ��~À ¶O�à Âà �� � À� ÆO����� Eí ¶O�à ��� �� ����������

8í Æ ��� � ������,�� � �� ����:í � ��� � ������,�� � �� ����

y���� Eíexpr : c8íc ≤ d d ≤ c:í ¶O�à ��� ���� �������� � ��� �

d*�� ���� Eí ¶O�à � � �8í ����� �� �)������ Æ:í ����� �� �)������ �� �"í � �� �)������ �� Æ Æ �� �)������ �� �

¸ ¹º » 8 $H 5 J���� ����� �� ��������� �� ��� �

¶O�à ��� ���� �� ������� �� �� �)������� �� � ���� Æ $ ÿ� ��� � � ��� �� � � � ��� �� � � � �� � � �� (���������� ��� ���� � ���� �� ��� � �� � ���� �� ����� ���� $ *� �+ �� �� � � � ���� �� ��� 2 ��� �������� ��� ��� � �� � � � � �(��� �� �� �� $ P ����� �� ����,�� � � �� ������� � ��� ���� � � ������ $ % �� '��� � ���� ���������� � ��� � �� � ���� � �������� � �� ��� � ����� �� �� ��������� ��� ��� � ���� �� �� ���� O ���� ����� �� ����� ���� �� �)������ $ M �� �� �������� � � �� ��� � �� ¶O�à ��� � �(��� � ��� � ��� �� � �������� � ���� �� �R¶�^�~³� �� ~À�� �¶� G���� ,� �� 8 $FI $

ÿ� ������� � � � ����� ��� � ���� � ��� �� � �� ���� �� ����� ���� � � � � ��� ������� �� ���� �;��'��� ���� � ���� � � �� ��� ��� ���� � ���� � 4

¦���ÏäËÔ áÏäËÔ áÓÐÉ X å ÔÌ äå ÔÌ Ú ''

M ,� �� 8 $E9 � ����� ��� ����� � ��� ���� � ����� ��� �� � ��� �� �)���� �� � �� � $ ÿ� �������� � ����� ������� ����� �� � � '��� � �� ���� � % L M ��� ���,�� ��� � � �� �� �w ��� ������� � ������� � ������������ $ ÿ� ��+������ � ������� � �������� ���� ���� G¯;�� ��� ���I �� � ������� �� �� �)������� G¯;������� � ���� ��� c] I ��� ��� ���� � �� ������� $ M� ���� ��� � ������ ��� 2 �� � | � ��} � ����'� �

� �� �)������ �� � � �� �)������ �� � � �� � ����� ������

m

<=

a

z

<=

a

<=

m

z

<=

a

<=

m

z

<=

¸ ¹º » 8 $E9 5 y���� ������ � �������� � ����� ���

�� �� ��;� � � ��� �� �� � ����� � � ���� � | � ��} � ��� � � � m>[email protected]/ ���� �� ���� ������ ������ $ M�

Page 56: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� "F

������;� � � ��� ������ �� �� � �������� � ���� �� $ 3 �� �� ����� � �� � � � �� �)������ �� � �� �� � �� � �� �� �� ����� ��� � �������� $M�� �� � ���� ����� ����� ���� ��� ����������� �� � ���� �;�� � ��� ����� �� � �� ������� ����� � ����� �� $ * ���� ��������� �� ���� �� � �������� �� ��� � �� ��� ��� 2 � ����� �� �� �)������� $ 3 � �� � �� ��� ��� � ����������� ���� (��� �� ������ �� �� ��� � �� � ���� � �������� GÂÃ�� I �� � �������� $ *�,� �������� � �������� �� �� ���������� GÀ �I ���� �� ������� �� �� �)����� �������� �� ��� ��� ���� �� ��������� $ ��� ����������� � ��� ������ �� ������� ����� ��� ��������� � � �� � � ����� � � �� � � ��� $O� � ��� ��� ���� 4 Æ�Q� ��~À �³� ��~À ��¶Q � � ÂÃ�� � À � �� ÂÃ�� � À � � PP� �� � �� �� � �;� � � �� �,� �� 8 $E9 ��� ��� ������ $

�ý� óôûðÿ ðõðûú ô�öò õö÷ ýó úïôûö2ï÷ øö òýñûïôðñûö öû ø 5ôù ôðÿ õð÷÷ö� öñû øö ûDó ö÷ M� ����� ÿ�� �)���� �� � � ���;�� �� � �� ���� �� �� �������� �� ��� �� 4

5 � ��� ���� � | {} 4 �¶O�à { À � � � ��,� �� ��� � �� ¶O�à �� �� ��� � À5 � ��� ���� � � �+ �������� ��� {d 4 � ¶O�à {d Æ �� � � �����;�� ¶O�à �� ��� � Æ ��

type(expr) ≤ d$

��� �� � �� ���� �� �� �������� ���� � ��� �� �� ��� ��� �������� � �������� ����� ����� $ P ���� � ��� ��� � �� (��� ������� � + ���� ���� �� ��� � � � �� ���� � ��������� �� 2 � �������� �� ����� ������ � �������� $J� ��� �� ������ �� �������� � �Z���� ��� �� ������ ��������� �� ��� �� �� ������� � ���� ��� �������� � + ����� �� ��� �� ���� �� � �ÿ�� ����� �� � $ M� � ������ ��� �� � � � � ��� �� � �� ���� �� ����� ����� � � ��� ������� ���� �� ��� � �� � ���� � �� � � � (��� ������� ���� � ���� � �� � � ��� � ����� ���� ���� 4

ÖÐÔ ÌAX � ÓÐÉ X ''ÖÐÔ ÌAä � á ÌAX �� ä å ''ÖÐÔ ÌAÚ � ÏäËÔ ÌAä ÔÌ Ú ''

M ���� �� ����� ���� �� ��� � ��� �� ��� ��� �� � � �� � ��� � � �� �� �w � ��� �� � ���� �� � ���,��� �� �������� �� ��� � $ ÿ� ������� ��� �� � ��������� � ������ 4

5 z ≤ a5 � D>CDA1 ��?/� m� �

M�� ����� � �� � �� ���� �� '���� ��� �� ������� �� �� �)����� ��� � � �� �� �w ��� � �� � ������ � � ���{��� �� � ���� �� � ��� ����� �� ��� � � ��� $ x ��� ���� � �������� �� ��� � ����� ��� ������� � D>CDA1 ��?/� m� � $ ������ � ��� ���� � � � � ��{��� � � � ������ ��� �� � �w � ���� � � ���� ���� ������� � �������� �� �� �� �)����� �� � � � �� � � � �� ��� ��� � ������� �� � ���� �� ����� ������ � ���� �� ���������� $ ÿ� ����� �� �� � : � �������� � ���� �� �� � ,� �� 8 $E9 � � � � ������� ���� �)����� $

N3ö� ó õö÷ÿ� �������� ����� � ����� ���� ���� � � � ������� ��� �� ������ � ����� ������ �� ���� ��������� ����� $ M�

���� ��� ����� �� �� �������� ������� 2 ����� ���� � $ M� �� � �;� � � ����� �� � ��� ��� ��� ��� � ���� ���������� $ M� ������� ������� � ������� � ���� �� $

î õ2÷ðö2ï÷ ñð�öô23 ø 54úïðûô�ö M ,� �� 8 $EE ������� � ����� ��� ��������� � � � �������� �� � ����� ������ $J� � ����� ����� �� ��À � �� ��À�����ö �� �� ��À�Àö~�����ö 4

5 � ���À�Àö~�����à ¶ �� �)������ �� ����À�����ö � � �� �)������ ����)� (� � �� � ���À ��ç¢ ¢� � �¢� à�� ¦¡­ à�� ¤�� ¤ ��¬�¢¦�� ��­ �¢� Ý��� ¤� £� «¡¬­ � ¦¡­ à£��� áÐ-�Î � Ï �� � å ¤�¢� £� ­ ���¬� ¡� ��� £� £�

¦¡¢�¬� ¢�� ¤� �ßà� Þ�¬� � ¢¡��  ¢��¬����  ¦  ©

Page 57: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

"7 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

  ������� K����� � �

point

get_x : int

get_y : int

rmoveto : int->int-> unit

to_string : string

point_colore

get_color : string

to_string : string

point_tres_colore

get_color : string

to_string : string

<=

<=

à¡ ¢��� ÖÐÔ � & � ÓÐÉ � ÌÙÓÔ � " ''!äÖ � & � � ÌÙÓÔ � +Ì ��� ÖÐÔ � � � ÓÐÉ � ÌÙÓÔ " $ ''!äÖ � � � � ÌÙÓÔ � +Ì ��� ÖÐÔ � Ï& � ÓÐÉ � ÌÙÓÔAÏÌÖÌÎÐ & � 9 ÖÐÍ 9 ''!äÖ � Ï& � � ÌÙÓÔAÏÌÖÌÎÐ � +Ì ��� ÖÐÔ �ÔÏ& � ÓÐÉ � ÌÙÓÔAÔÎÐËAÏÌÖÌÎÐ $ , 9!ÐÎÔ 9 ''!äÖ �ÔÏ& � �ÌÙÓÔAÔÎÐËAÏÌÖÌÎÐ � +Ì ��� ÖÐÔ �" � Í� ÏäËÔ � Ï& ÑÎÌÚ � ÌÙÓÔAÏÌÖÌÎÐ ÔÌ �ÌÙÓÔ ''!äÖ �" � � ÌÙÓÔ � +Ì ��� ÖÐÔ � , � Í� ÏäËÔ �ÔÏ& ÑÎÌÚ � ÌÙÓÔAÔÎÐËAÏÌÖÌÎÐ ÔÌ � ÌÙÓÔ ''!äÖ � , � � ÌÙÓÔ � +Ì ��� ÖÐÔ � Ï" � �ÌÉÓ ÏäËÔ �" ÑÎÌÚ � ÌÙÓÔ ÔÌ � ÌÙÓÔAÏÌÖÌÎÐ ''!äÖ � Ï" � � ÌÙÓÔAÏÌÖÌÎÐ � +Ì ��� ÖÐÔ �ÔÏ" � �ÌÉÓ ÏäËÔ � , ÑÎÌÚ �ÌÙÓÔ ÔÌ � ÌÙÓÔAÔÎÐËAÏÌÖÌÎÐ ''!äÖ �ÔÏ" � �ÌÙÓÔAÔÎÐËAÏÌÖÌÎÐ � +Ì ��� ÖÐÔ � Ï# � �ÌÉÓ ÏäËÔ � , ÑÎÌÚ � ÌÙÓÔ ÔÌ � ÌÙÓÔAÏÌÖÌÎÐ ''!äÖ � Ï# � � ÌÙÓÔAÏÌÖÌÎÐ � +Ì ��

¸ ¹º » 8 $EE 5 *��� ��� �� �� ��� �� ���� � � ��������

ÿ� ����� �� ��� ������� � Ä �� �� �� � ���� �� ��À � � �Ä �� � ���À�����à ¶ � �� �À �Ä�� �� ��À�Àö~�����ö $ �� G���� ������ ��� �¡I ��� �� ������ �� � ���À�����à ¶ G���� ������ ����� ��À�Àö~�����öI ��������� �� � � � ��� � � ���À $

ÿ� ������� ��� ����� m>[email protected]/D � ����� ��� 4 �� ��� ������� �� � ���À�����à ¶ � �¡ ��� ������� ���� ��À�Àö~�����ö �� �¡ ��� ������� �� � ���À�����à ¶ $

� úúòïðû2ïö øö � úû4ý øö÷ ÿðñôðïö÷ K� � �������� ��� � �������� � ������� �� �� �)����� � �� ��� ��)������ �� � �� �� ��� � ���� ��� � ������� � ��� � '��������� �w �� ��� � �� ~¶� ���{� �� � ���������� ;��� $ M ,� �� 8 $E8 ����� �� �� ���� À�� ��� �� � ���� �� ¶g � � ����� � ������� ����� �� �������� �� À�� �� �� � �� �)����� �¶ÂÀ �� à �ìRÀ � � ������ �� À �� �� ����,������� � � ������ ¶g $M ��,������ �� � ���� à �ìRÀ ��+ ;�� �� � ���� �¶ÂÀ �� �� ������ � ������� à G2 � ��� �� �I � ��� ���� �� ì¶À�à G2 � ��� �� ì¶À��I � � ���� ��� � ��� � �� à �� � ��� � �� � ����,������ �� ¶g � �� �� ��� ������� �� ������ �� à �ìRÀ �� � � ��� ;��� �� �+�� � ���� �� |��} ���� à �ìRÀ �� � ��� � ��� $M� � ���� ������ � � � ���� ��� �� � ������� �� �¶ÂÀ G� �� ��I �� �� �� à �ìRÀ Gà I � �� �+ �� � �� ��� ��� �� � � ���� �� ¶g � � � �� ���� ������ ��� �� �� à �� � � ��� ;��� ������� ��� � À�� $

ÖÐÔ Ö � ÓÐÉ ÖÐÑÔ &� ''ÖÐÔ Ö� � ÓÐÉ ÖÐÑÔ &� ''ÖÐÔ Î � ÓÐÉ ÎÙÒØÔ &� ''ÙÑ Ö�Ð1 áÏäËÔ Ö� ÔÌ ÔÌ� å ÔØÐÓ �ÎÙÓÔAËÔÎÙÓÒ 9�¢ 9ÐÖËÐ �ÎÙÓÔAËÔÎÙÓÒ 9%£ 9 ''ÔÎGÙÒÓ ÌÎÐ áÖ�Ð1 áÏäËÔ Î ÔÌ ÔÌ� åå '�ÎÙÓÔAËÔÎÙÓÒ 9%£ 9É ÙÔØ �äËÔ Ê�äËÔAÑäÙÖÍÎÐ A ×� �ÎÙÓÔAËÔÎÙÓÒ 9�¢ 9 ''

�� ����� �� ������ � ���� � �������� �� � ����� <� �� ��� ������ �� ��� ������������ $ J� ��� 2����� � � � � ������ ���� ¶ ��� � ��� �

αG��� � �� ~¶�ÂI �� �� ��� �� � ������� �� �� �)����� �� �

�������� �� ���� ��� � � �� �� �w � � ���� �� � � �� � ��� � '��������� $

Page 58: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� "H

  ������� K����� � �

topclone : top

eq : top -> bool

print : unit

to_string : string

left

eq : top -> bool

get_l : int

to_string : string

right

eq : top -> bool

get_r: int

to_string : string

<= <=

§ �¬�¬¦§  � ¤� ¦£�����ÏÖäËË !ÙÎÔÍäÖ ÔÌ� �

Ì �ÐÏÔ áËÐÖÑ åÚ ÐÔØÌ� !ÙÎÔÍäÖ ÔÌAËÔÎÙÓÒ � ËÔÎÙÓÒÚ ÐÔØÌ� �ÎÙÓÔ � �ÎÙÓÔAËÔÎÙÓÒ áËÐÖÑ�ÔÌAËÔÎÙÓÒ åÚ ÐÔØÌ� ÏÖÌÓÐ � �Ì ÊÏÌ�G áËÐÖÑ åÚ ÐÔØÌ� Ð1 áä � ÔÌ� å � ÔÎÍÐ

ÐÓ� ''ÏÖäËË ÖÐÑÔ á- � ÙÓÔ å �

Ì �ÐÏÔ áËÐÖÑ åËÍ ÙÓØÐÎÙÔ ÔÌ�!äÖ Ö � -Ú ÐÔØ Ì� ÒÐÔAÖ � ÖÚ ÐÔØ Ì� ÔÌAËÔÎÙÓÒ � ËÔÎÙÓÒAÌÑAÙÓÔ ÖÚ ÐÔØ Ì� Ð1 á - � ÔÌ� å �

ÖÐÔ -Ö � �ÌÉÓ ÏäËÔ - ÑÎÌÚ ÔÌ� ÔÌ ÖÐÑÔ ÙÓÖ � á-Ö�ÒÐÔAÖå

ÐÓ� ''

¸ ¹º » 8 $E8 5 *��� ��� �� ���� ���� ���� � � � �� ��������

� úïðûô�ö �2 õû ðó õö M� ������;� � ���� ��� G���� ,� �� 8 $E:I � ����� � � � �������� � ���� �� $ M ������ � ������ ��� ����� � � � �� � $ ��� ����� �����;��� �������� �� � ���� À $M� ������� � � G�à I � ����� �� � ��� ����� ������� ��� � � �� ������ �� � ���� �� �� � �� � � � ��� � � ���� �� ��� � � $ ��� ���� ��� ��� � � ������ �� �� � ��� �� 4

�¶À �à ] ³� ��~À �Æ�Q� ��~À � Ä ÂÃ�� � À� �� �� ÂÃ�� �� � À� � PP$

��ó õôñûôûðýñ

����� �� �������� �� �� �� �� �� �� ����� � �� � ������� ���� � �ÿ�� ����� �� � $ �� ��y� � ����'��� � � ������ � � ÿ�� ����� �� � �� � ��� ������ � � ÿ�� ����� �� � $ K� � �� ���� ������ � �� ��� ��� ��� $3 �� �� � ������� � ������ � ����� ÿ�� ����� �� � '� ���� �� ��� ��� ��� � ���,�� $�� ��y� � � ���,� ��������� ��� � �������� �� ����� �� � � �� ��� �� ������ ����� ����� � � � ��� ������� ��� � �� ���� G� � �� ~À�� �¶� � ~³� �� ~À �� �¶� � ��~À � ³� ��~À �� Æ�Q� ��~ÀI � ����������� � ��������� � � � �������� �� �� �)������� G~³� ��R¶Ã �ÀI ��� �� �������� �� ���� $

M ��� �������� � � ��� ��� � ,���� ��~À �� � � � ������� � ��,������ � ��� � �Æ �� �� � �����������~À�Â� ��³Ã¶ ���� � � ��� '������� � ��� �� ��� � ���� ��� �� ����,���� � � � ��� �� $

¤ úòõôïôûðýñ øö òõô÷÷ö % �� �������� �� ���� � � � ������� ���� �� �� ��� � � �������,������ ���� ^¶µ�� � �� ��� � ������

id� �� � � ��� ��� � ������� � ���� �� �� � ,� �� 8 $F 2 � ���� $

M� ���� � ��� �������� ��� �� � ��� ��� ��� ��� ��� ��� � ������� �� ����,���� �� ���������� � �������� $v��� �� ��� ��� � ���� ��� ��������� � � ���� � � �� ���� � � � ������ � � �� ���� � �� �� �)������ � � ������ � $

Page 59: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

!9 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

  ������� K����� � �

t

a

get_a : int

b

get_b : int

c

get_c : int

abc

get_abc : int * int * int

<=<= <=

<= <=<=

� ÖÐÔ ä Ï& � ÓÐÉ ä Ï & ''!äÖ ä Ï& � ä Ï � +Ì ��� ÖÐÔ ä & � áÍ� ÏäËÔ ä Ï& ÑÎÌÚ ä Ï ÔÌ ä å ''!äÖ ä & � ä � +Ì ��� ÖÐÔ & � áÍ� ÏäËÔ ä Ï& ÑÎÌÚ ä Ï ÔÌ å ''!äÖ & � � +Ì ��� �ÌÉÓ ÏäËÔ & ÑÎÌÚ ÔÌ ä Ï ''× � ä Ï � +Ì ��� ÖÐÔ Ô & � Í� ÏäËÔ ä & ÑÎÌÚ ä ÔÌ Ô ''!äÖ Ô & � Ô � +Ì ��� �ÌÉÓ ÏäËÔ Ô & ÑÎÌÚ Ô ÔÌ ä ''× � ä � +Ì ��� ÖÐÔ Î � �ÌÉÓ ÏäËÔ Ô & ÑÎÌÚ Ô ÔÌ ä Ï ''!äÖ Î � ä Ï � +Ì ��� ÖÐÔ ÓÎ � ÏäËÔ & ÔÌ ä ''!äÖ ÓÎ � ä � +Ì ��

¸ ¹º » 8 $E: 5 *��� ��� � �������� � ���� ��

¦¡¤� ଡ¤� �ÖÐÔ AAAX � áá �äËÔ ÊÚ äWÐAÙ� áåå � �äËÔ ÊÙ� å ''ÏÖäËË X �

Ì �ÐÏÔÙÓØÐÎÙÔ ä äË AAAËÍ�ÐÎA�ÙÓØÐÎÙÔ Ú äË AAAËÍ�ÐÎA &Ú ÐÔØ Ì� AAAÏØÐÏW AÙÓ ËÔäÓ ÏÐÌÑAÙ� áW � �äËÔ ÊÙ� å �

áAAAX �� W 88 AAAËÍ�ÐÎA &�AAAÏØÐÏW AÙÓ ËÔäÓ ÏÐÌÑAÙ� W å88 AAAËÍ�ÐÎA��AAAÏØÐÏW AÙÓ ËÔäÓ ÏÐÌÑAÙ� WÚ ÐÔØ Ì� AAAÏØÐÏW AËÍ ÙÓ ËÔäÓ ÏÐÌÑAÙ� áW � �äËÔ ÊÙ� å �

áAAAX �� W 88 AAAËÍ�ÐÎA &�AAAÏØÐÏW AËÍ ÙÓ ËÔäÓ ÏÐÌÑAÙ� W åÚ ÐÔØ Ì� AAAÏØÐÏW AËÍ ÏÖäËË áW & � �äËÔ ÊÙ� å áW � � �äËÔ ÊÙ� å �

ÙÑ áAAAX �� W &å ÔØÐÓÙÑ áW & �� W �å ÔØÐÓ ÔÎÍÐ ÐÖËÐ AAAËÍ�ÐÎA&�AAAÏØÐÏWAËÍ ÏÖäËË W� W �

ÐÖËÐ AAAËÍ�ÐÎA&�AÏØÐÏW AËÍ ÏÖäËË W & W�ÊÊÊÐÓ� 'ÑÍÓ AAA- ×� áAAA- � X �� Ú å ''

M� ���,�� ��� ��� � � �� 2 �� � �� ��� ������,�� � ��� $ M�� ��� � ��� ����� �������� ���� �������� ����� �� ������ � ��������� ��� �� � ������� $

��� � ���� � ���;�� �� �� ��� � � � ��� ����,�� ������ �� ��� ��� ��� ����� $ *� � �� �� �)������� �� ���������� 2 � �������� � �� � ���� ����,� � ������� �� �� �)����� $ M�� ����� ��� ���� ��� ����������������� ��� � � ���� �� �R¶�^��� ~À�� �¶�Â��Æ � �� �� ��� �R¶�^�~³� �� ~À�� �¶�Â��Æ $ 3 �� �� ��w � ���� � ������� �� � ������� � �� ���� �� �� �� � � ���� ��� ����� � �� � �������,���� �� � ���� � � ����� �� � ���� �� �� � �� ����� �� �� � ��� $ 3 �� �� � �w � ���� ������ � �� �)������ � � ��������� �� ���� �� �� � ������� �� ����� ��� �� ��� ��� � ������� �� � (� � ��� ��� ����� �(���� � �� ���� �� � �)� (� � �� � � (� � �� �� � � �� � ��� $ ��� � � � ������ ��� � ������� ��� ����� �(���� �������� � � ��� ����� � ��+�� ����� ���� �� � �� ��� ����� �(���� $ M � ������ �R¶ �^�~³� ���~~ �+�� � �� �� ��� ��� ����� ��� � ����� �� �� �)������� � � � �� ���� � ������ �� � ���� �� ����� ���� ����� �� � ����� ������ �� ��� ;���� $

Page 60: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� ! E

¥ý2�öõõö÷ ðñ÷ûï2òûðýñ÷ ÿ� ������� � ��� ����� ����� ������ ����� � ������� ��� �������� ��� ���)�� ����� �+ �� �� �+������ ��� �� �������� �� ��� �� � � ��� ��� ��� $

5 M�� ����� ����� � � �Ä� � �� ~À�� �¶� �Ä �� � ~³� �� ~À�� �¶� �Ä ���� ��� ���� ���� ������ ������� � ��� �� ��� � ���� ��� �R¶ �^��Æ � �R¶�^��� ~À�� �¶�Â��Æ �� �R¶�^�~³� �� ~À�� �¶�Â��Æ � � � ���� ��� �� � �� �� �Ä ����� �� �� � ��� $ *� ������ ��� ���,�� � � � � �� ~À�� �¶� �Ä �� ����� 4�¦�R¶�^��� ~À�� �¶�Â��Æ �^¶µ��Ä�

5 M ������ ���� ��~À ¶O�à À� �Ä ����,� ���� �� �� ��� � � � ���� �� ����� ���� �� � ���� �� ��� ����� � ���� ���� �� ¶O�à ��� ���� �� ������� �� �� �)������� �� � ���� �Ä 4 ­ �7  ¦

ÖÐÔ Ì � Ð-�Î ÙÓÙÑ Ì�ÏØÐÏW AËÍ ÙÓ ËÔäÓ ÏÐAÌÑ áWÐGAÏ &åÔØÐÓ áá� � ÊÚ äÒÙÏ Ì å � Ï&åÐÖËÐ ÎäÙËÐ á�äËÔAÑäÙÖÍÎÐ ÖÌÏ ÊÊÊå

5 M�� ����� ����� ³� ��~À ¶O�à Âà �� �� À� �Ä �� Æ�Q� ��~À ¶O�à ÂÃ�� �� À � �Ä ����,��� ����� �� ��� � �¶O�à �� ��� � �� �� � � � � ������� �� �� �)����� ��� ���� ����'��� ����� ��� �� � ����� �Ä �� �� � ����,� � � � ������� �� �� �)������� ��� ���� ����,�� G���� �� �� ���I ����� �� �� � ����� $ v��� ��� �� �������� � � � Æ�Q� ��~À ¶O�à Âà �� �� À � �Ä 4 ¦¡¤� �¢7�¢¤¬�ÖÐÔ Ì � á Ð-�Î � Ï&å ÙÓ

ÖÐÔ - � áá� � ÊÚ äÒÙÏ Ìå � Ï& å ÙÓÖÐÔ A � á - �� Ï�å ÙÓ

ÙÑ Ì�ËÍ ÏÖäËË WÐGAÏ& WÐGAÏ� ÔØÐÓ á á� � ÊÚ äÒÙÏ Ìå � Ï�åÐÖËÐ ÎäÙËÐ á�äËÔAÑäÙÖÍÎÐ ÊÊÊå

O� ��� ��� ����� ����� � � �������� � �ì �� �� � ������ � ����� �� ����������� �� ����;� � �� ��� �� $ M�������� � �ì �� ��� �� � � � �����;�� � ���� �� � ��� � �� � ���� �� ���������� $ ��� � � ��� ��� ���������� ����� �� � � ����,���� � � � ���� �� ����� ���� �� � ���� �� ��� �� ������� �� �� �)��������� � ���� ���������� � �� ������ � � � ���� �� � � � (��� ������� ���� � ��� � $ M�� ���� ����� ����� �ì �� ���� �������� � � � �+�� �� ��� ����������� ����� � �� ����, �� � ������� �� �� �)����� ����� ����� �� ���� � �������� �� � ���� ���������� $

§ ý ø2 õö÷ öû òõô÷÷ö÷ M�� � ���� ��� � ����� ������� ���� � � ���� ��� ��� �� ��� � ����� ��� ���� � � ��� $ O� ��� ��� ����� � ������� �� ��� � �� G��¨¶�À $$ ¶�ÆI � � ���� (��� ������� $ M ��������� � �� ���� �� '������ � � �� ��� 4 ���~~ � ] � �� � ���;�� �� ���a � ���'��� ����� � � � (��� ������ ��� � � ��+ ������� ��� ��� �� �� ����� $ M ��������� � ���� ��� ����� �� �� � ���� ��� ����� � ��� � ����� ����� � � �� �� � '� ����� �� ����� �� ���� �� �� ������� � �������� �� � � ��� �� ������ ����� ����� ������ �� �������� � � ��� ��� ��� ����� �� � � � ����� � ���� �� ���� � �� ����� $

M�� � � � ��� ��� ����� � � ���� (��� ����� �� � � ��� ��� � ��� � ������� ��� ��������� �� ����� ��� ���� ��� �� � ��� � � � ��� �� � $

© ð� ðûôûðýñ÷ øö õ 5ö3ûöñ÷ðýñ M �������� ��� ������ �� ���� ��������� ��� �� �� �� ����� ��� �������� ������ ��� ��� |��}$ L �� � �����;� � �� � � � �� (��� ����� ��� �� � ������ $ K������ ������ ��� �� ���� ª� Æ � � ������ � � �� ���� � $ O� �� ��� �� ������ � �� ��� �

int d� �� ��� ���� �Z�

� ����� �� �� ��������� ��� ��� � ���� �$ O� �� ��� � �� ���� ������ ��� ��� ��� ������� ���� � ���� Æ � ����� �� ��� � ������ � � � �� ��� ;��� �� ��� � � ��� � Æ « v � ������ � ������� � � � � ��� ��������� ���� ���� � ����������� � ������ 4 Æ�Q� ��~À � ÂÃ�� � À� Â���À Æ � � � ������ � �Z���� � ����� $

�ý¬û øö õ 5ö3ûöñ÷ðýñ M� ���� �� ���� �� �������� ��� �� � ��� ��� ��� ��,������� �� ���� ���� ���� ��� �� ����,���� ��� �������� $ M ���� �;�� ����� ��� ��� �� '��� ������� � ����� � ��� �� ��� �� �� �� � ���� ��� � ����� ������� $ J� ��� 2 ����� � � � ���� ��� � ������� � � �� ���� ��� ������ ���� ��� ��� ������� �� ���� ���� $ M�� ��� ��� � ��� ������ �� �� � ���� � � � ��� $ O� � �� Q � � � �������� ���� ��� � ���� ��� ��� ���;��� ��� ������ ��� � � �� �� �w ���� ���� � � � � � � �� � � ����� $ J�

Page 61: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

!8 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

� �� �� �� ��������� ����� �� �� �� ����� � � � ������ �� � ��;�� ��'��� � ��� ����� ����� �� ���� � � ��� �� � $ 3 �� ��� � � � ��� �� � ��� ���� �� �� �Z� �� � ���������� ��� ����(� �� ��� '�� �� $

O� � ��� � ��� ���� � �� �Z� ��� ���� ���� ��������� 2 � ���'���� � �� � �������� �� ����� $ J� ��� 2 ������ � � ��� �� � � �� � ���� �� �� ���,�� �� ��� ����� ������� �� � ��������� ����� �� � ����� '������������ ����� � � � ��� ��� � �� ��� � � �� �� �w ��� � ���� ��� � ����� ������� ���� �� � � �� ����� ����� �� � �� �� �� � ���� $ ��� ��� ��� 2 �� � � � � ��� ��� ;���� '���������� ��� '������� �� ����� � � ��Z� ���� $

� �� �J ��������� �� �� ��� M � �������� ��� � ���������� � � �� ��� � �� ������ �� � ���� ���� � ���� � � � ������ � � $ � ����

�� � � �� �� ��� W� �� ��� � ��� � ,���� $ ����� ��� � ��� ���� ����� �� �� �� � ������ � � ���;� 2 � ,���� $ M ����� �� �� � ��� �� � � �� ��� � � ��������� �������� � ��,������ � � � '��� � � � � �������������� ��� ������� $ *� �+ �� � �� ���� ����� ����� � � �� ��� � �� �� ����� �� � �� ���� � �� � � ����� ������ � ���� �� ��� � �� ������� G �� � ��� � �� ����I ����� ��� � ,���� $ � ���� � � �� �� �� ������ ��� �� � ���������� � ��� ���� �� ���� |����������� }$

M ��� �������� � � � � ����� � �� ����������� �� ��� � ��� �� ������� ���� �+�� �� ������ ���� ���������� ��� ��& ���� � � �� � ���������� �)����� � $

5 õöòû2ïö�úòïðû2ïö øö ÷ûï2òû2ïö÷ øö øýññúö÷ ­ ��� � � � � �� ���� � � � �� � � �� (��� � � �� � � ����� � �� � ��� � �� ��� � � � � �� � � �� ������ ����� 2 � � �� ���� � ����� � � � � � ���� 2 �� ��������� � � ����� ���� �� �� ���� ���� � ��� � $

5 óôïûô�ö ý2 òýóðö ­ M ��������� ��� � � �� ������ ����)�� �������� �� ����� « y���� �� ��� � ���������� � � � ���;�� �� � ,�� ������� �� G ���� �� � ������� ������ �I � � � ����� �� � � � � �� �� ��;� �,�� � � ��� ��� 2 � ������ �� ���� ��� $ ����� ��������� � ��¯ ��� � ����� �� � ��� � � ��������� �� ��� �� � �� � � � �� '��� $ 3 � ��� ��� � �� ������� �� ��� �� ������ �� ��� � � ��, ���� � �� � � ������ �� �� � ����� ��� �� ���� ��� � ��;� �� �� � ������ ����� � � �� ����� ��� ������� � ��� $

5 �ôõö2ï÷ òðïò2 õô ðïö÷ ­ 3 �� �� � � � �� ��� � �� ���� � � ����������� ��� ����� ���� � �� � � ��� $J� ��� �������� �� �������� � ����� $

5 �ôõö2ï÷ [ýñòûðýññöõõö÷ ­ M�� ��� �� '������������ � � '��� �� ��� � �� �� � ����� � � �� ����� �������)��� ��� �� � � �� ����� � �� $ M ����� ��� ������ ��� � ���� � ������� G������I � � �� 2 ��� ��� $® � ' �)�� '��� ���� � ��� « J� ��� � ����� �� �� ���W�� ��� �� ��� ���� ������ � � �� ���� �� ��� � (� � ������ � � ��� ��� � ���� ����� 2 ���� ������ $ J� ��� ��� � ����� �� �� � ��� � � ���� ������ ����� � ���� �� ���� '������ � � �� �� ��� �������� � ����� � � ����� � �� ����� ������� �� � �� ��� $

5 �ôïôñûðï õö ûDó ö ô2 ïúö� óõýð � ���� � �������� ��& ��� �� � � ����� � $ M� ����� ����� ������� � � ��� ��� �� ��� ��� � ������������� �� � ����� � �� ��� � 2 � ���� ���� $ L �� �� � ���� ���� � � � � ��� ��� �� �������� ������ � � �� � �� � ���� ���� $ ® �� ��� � � � �)�� ������ 2 ����� � ������� �� ������ � � � � � � � ��� �� ��� � � �� �� ����,�� � �� ��� �� « K� � �� ��� �������,�� � � � ��� � ��� � � ���;�� �� ��� � � ���� ����� �������� �� �� �� ����� � � �� ' ���� � ��� ��� �� ����� ������ �� � ��� � � �� ��� �� � � ������ � � �� ����,���� ����� ��� $ P�� ��� ���{� � � ����� � �� ������� �� �������� ��� ��� �� � � � � ������ �Z� � � (� � �� � �� ����������� � � ��� � ��� �� ������ � � $

K� � ��� ��� '��������� �� �� � ����' � ÿ�� ����� �� � � ���;�� � � ����� � �� |����������� } �� ������� �� � � � �� ��à ~R�� � � � ���� �� �Z� ���� �� � ����,���� �� ��� �� �� �� � � � �� (��� ������ � � ���� ��� ��� $ 3 � �� � � ��� �� � �� � ������ �� ��� �� '������������ �� ��� �������� �� ������ �� ��� ���� �� � (� � ������ � � � � � (��� �Z� � � �� � ����� � �� � �� ��� '��� �� ��� ���� � (� � ������� $ % � ��������(� � � ������� � � �������� ��� �� ��� �� �� � ��� �� ��� ������� �� ����� ����� ��+������ ������ � ��� � ��� �� ��� ��� � � (� � ��,������ �� ���� $ ÿ� ��� �� ������ ��� �� �����;� � �� ����� � � �� ��

Page 62: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c dc d be `bf g_ hf h��b ` � ���� y�� !:

��à ~R�� � � � ��� ��� ��������� �� �� �� � � � �� ¯³��´� � � �� ;�� �� � ��;�� �Z�� � � ��� ��� ��� �� � ��� ������ ��� ��� ������� $

� ý ø2 õö ��à ~R��M� � ����� � �� ����������� � � �� �� ��à ~R�� � ��� �� �� �������� � ��� �� ����� �� ��� �� $ J�

������ ��� �� � ��� ��� ��� '��� �� ��� � ��� � ������� � �� � �� � ����� � �� ��� ��� � �� $ M�� �� �'������� ��������� ���� 4

5 À ��~Àà ��ì 4 ∀α.α→ extern\

flaglist→ string�w

�� � ��� � ��� ��

5 ÂÃ�� �~Àà ��ì 4 ∀α.string → int→ αM� �������� ����� �� �� '������� ��� � � ����� ����� �� ���� � �Z���� �� ����� � �ÿ�� ����� �� � $M�� ��� �� ��� '������� �� ������ ���� � ���� ������ G

unit�

stringI $ K� ����� ��� '������� �� ��)

����������� ��� � ��� � � ���� ����� � ?°�° �� ��� � � ��� ��� ���α

�� � ����{� �� �� � � ��� � ������ ;���� $ 3 � ���� �� � � ��� ��� � � �� � �� �� ��;�� ��� ���� �� � ��� ����� �� ��� �� � ���������� $M ����� ��� � ���� � ����� �� � ��� ����� ��� � '������ � �ì ������µ �� ��� � ∀αβ.α→ β

$¦¡à �

� ÖÐÔ Ú äÒÙÏAÏÌ�G ä �ÖÐÔ Ë � ±äÎËØäÖ ÊÔÌAËÔÎÙÓÒ ä /±äÎËØäÖ Ê�ÖÌËÍÎÐË0 ÙÓ±äÎËØäÖ ÊÑÎÌÚ AËÔÎÙÓÒ Ë � ''

!äÖ Ú äÒÙÏAÏÌ�G � ãä ×� ã � +ÑÍÓ �M � ��������� � � �� ����� '������ ���������� �� ����;� � �� ��� �� �� � � � ��� � ���(� �� �� �� � ���� ����

� ������ � � � �� �� � � � � �����;� � �� ����� $¢¡¢ �²¬

� áÚ äÒÙÏAÏÌ�G " � ÑÖÌäÔ å * Ê " Ê& ''�ÐÒÚ ÐÓÔäÔÙÌÓ ÑäÍÖÔ� áÚ äÒÙÏAÏÌ�G "å * Ê " Ê& ''�ÐÒÚ ÐÓÔäÔÙÌÓ ÑäÍÖÔÿ� � ��� ���� �� � ���,� � ����� ����� � $

îöï÷ð÷ûôñòö ó ý2ï õö÷ ýÿ � öû÷K� � ��� ����� 2 ���� ��� ���� �� ������ � ���������� ����y� � � � � ������ ��� ��� ��� � ��������� $ M ����� ���

�� ����,�� �� ��� � � � �� ��� � ��� � �� �+ �� �� � 0.D/ ���� �� � $ y� ��� ��� ����� ��)�� �)��������� � �� ���� �(��� ~¶Ã �����¶ $ ��� � ��� �� ��� ��� �������� �� � � � ��� � �� ~¶Ã �����¶ �� �� ������� � ����� �� � ��+ �� �� � m>[email protected]/ ���� � ���� ���������� � ���� �� ���� ������ ������ ����� ����)��� ~¶Ã �����¶ $

% � ��� �����(� �� '��� �� � � �������� � ���� ��� ��� �� �� �� � ������� � ���� ��� � ���� ��� � ���� ������ �� �� ��� ��� ������� � � �� � (� � ���� $ P ���� �� ��� ��� ������� � ������� � � � ��� �� ����2 �������� $ ³ � ��)����������� �� ���� � ��� �� 2 ����� ��� ��'��� ����� ��� ������� � ������� �� �� ������� � ���� ��� � ���� ��� �� � ���� � �������� $

K� � �� � �� � �������� � � �� ���� ���;�� ��� �� �� �� �� ���� �� � ���� ��� � ���� ��� $*� ������� ����y� � �� � � � ��� � ��� ���� ��'��� ���� � �� � ��� �� ����������� � �� ��� � ��� ��� ������ �� ���� $

��ó õôñûôûðýñ ����� �� �������� � ����� �� �� ������ ����� � ����� �� - ��- �>0�DD?@´ �� �� � ��� ��'������� � �� �� ���� � � � � � ������ ��� ������� � �������� ��� � ¯�� � ������ $ M� � �� ��¯³��´� �+ �� � � ���� ����� �� '������� � �� � ������ � � L M $

K� � �� � �������� � � �� ���� ���;�� � �� � ��� G��µ � ´� I ��� � � �� 2 � ���� �� ���� � ������� ������ ������ � ������ � � �� �� $ K� � ��� ��� � ���� ��� � ������� G´� I � �� ��� �������� �� ���� ��'������ �� ����� ���� � ������� �� ���� ���� �� �+ �� �� �� �������� �������� � ����� �� � � ¶Q

Page 63: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

!" [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

� � �� ��� �� � ���� ��� ��� �� � ���� $ 3 �� � ����� ��� �� � ,� �� 8 $E8 � � ���� �¶ÂÀ � �� � ���� � � ��� ����� �� � 4

� ÖÐÔ Ö � ÓÐÉ ÖÐÑÔ " ''Ö � ÖÐÑÔ � +Ì ��

*� � � ��������� �������� �� ��� ����� �� � � �� ������� �� '��� �� �� � � ������� ��� ��� ����)������ ��� � ���� ��� � ���� ��� �� � ���� �¶ÂÀ $� ÖÐÔ äÖ � ÓÐÉ ÖÐÑÔ ''äÖ � ÙÓÔ ×� ÖÐÑÔ � +ÑÍÓ �

3 �� � � �� � � � �������� � ����������� ��� �� ���� '��� �� �� � � � ��� ��� �� � ����� � �� � ���� ���� ���� ��� $

P ���� � � � �� � �������� ���;�� �� ����� � �� � � �� 2 � ���� �� ���� ������ � ���'��� ���� ��� �� �� � ���� �� �� � ����� � �� � ���� ��� � ���� ��� $

M�� '������� � �� �� ���� � � ���� � ������� �������� � ��� �� � � � �� ��������� $ M� � ����� � ������������� ������� �� ����� �� ��� �� 2 � �������� � ��� ������� � ������� $ O�� '��� � � �� �� ������2 � ¶L M � ��������� ��� � � � � ����� ����� $ %� ��� �� �������� ������� �� ��� ��� ������� � ������� G�� ������� ���� �� '������������I �� � �� �� � ���� $

M�� �� � '������� ��������� � � �� �� ¯³��´ � ���� 45 À ��~Àà ��ì 4 ∀α.α→ string5 ÂÃ�� �~Àà ��ì 4

string → serialize�� � � ���� (��� �������� �� � � ��;�� � ����� 4 �6�­ à£��� ÖÐÔ Ì � ÖÐÔ Ë � TÍÚ�?Ì ÊÔÌAËÔÎÙÓÒ Ö ÙÓTÍÚ�?Ì ÊÑÎÌÚ AËÔÎÙÓÒ Ë ''Ì � ËÐÎÙäÖÙXÐ � +Ì ��� ÖÐÔ Ô � ÏäËÔ Ì ÔÌ ÔÌ� ''Ô � ÔÌ� � +Ì ��� ÖÐÔ ÖÔ � ÏäËÔ Ì ÔÌ ÖÐÑÔ ''ÖÔ � ÖÐÑÔ � +Ì ��� ÖÔ�Ð1 áÔ å ''× � ÌÌÖ � ÔÎÍÐ� ÖÐÔ Î � ÏäËÔ Ì ÔÌ ÎÙÒØÔ ''·Ó ÏäÍÒÔØ Ð-ÏÐ�ÔÙÌÓ � ÊÊÊ

K� � ����� ��� �� �� ��� � � � � �� �������� �� ���� � � �� ���� ����� �� � ������ � �� ��+ ������ ��� � �� � ��������� � � ���� 4

5 ���� ��� ���� �� �������� � �� ��� �� �� Gm?´ �D/I �� ������� � ��������� � L 3 ! � � ��� ������ ������ �

5 � � � ��� ����� �������� � �� �� � ��� ��� m?´ �D/ ��� 2 ����� �� � ����� �� ������ �� ��� ¸������� ¸������� � � � �� ���� � �� �� $

© ð� ðûôûðýñ÷ J� � ����� ������ �� ��� ������� 4E$ ���� � ��� �������� 4 ��� ������� � ������� '������������ �� ���� �� ������� �8 $ ���������� � � � ��� � �� �� � �������� �� ���� � � � '������ � ������� �� � ���� ��� � ���� ��� �: $ ��� ����� ��� ������ �� ���� �� ������� G���������� '���� � � �� � ���� ������� � ��� ����� �I $

3 �� �� ���� ��� � �� �� � � � �� ������ � � �� ������ � � � � ����� �� ��� � ��������� � ���;�� �� � ��� ����� � �� '������ � �� ������� $ M� �� ��;� � � �������� �� � ��� � ��� �� ��������� �� ����� 4

5 ��� ����� �� �� ��� �� � ��� � �� �� � � � �� � '��� �� �������� �������� �� � ¶Q �� ���� � � ��� ��� ���� � ��� �� �� � � � ����� �� ���� ��� ��� � ������ � � �� ���� ���� ��� � � �� ���� �� �� �À ��� ��¶Ã ��� ��� �� �

Page 64: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d= d be `bf g_ hf ^] a ] jj¹jb � f h [º !!

5 ��� ������� �� ���� � ��� ���� �� � �������� � � � ���������� ��� �� � � ���� ��� ���������� � �������� �� � ���� ��� � ���� ��� � ���� �� � �Z�� $

M� ������;� � � ��� ���� ��� ����� ��� ������ � ����y� � �� ��� �� ������ � |��} �Z� � � � �������� ��� ������ $ ��� ��� ������� � � ���� ��{��� '����� � � �� �� � �� ������;� � � �� ��������� � � ����� � � ���� �� � � ��� �� $ x ��� ���� ����y� � �+�� ��� 2 � � ��;�� ��� �� � ��� ����� � ����� ���� �� ���������� ����� 2 � <� �� � �� �������� �� � � �;�� � �ÿ�� ����� �� � $

bïô�ô23 òýññö3ö÷��� � � ��������� 2 � ������ " $: � �������� ��& ��� � �� � ��� �� ����,���� ���� �� � �� ��� � ���

��� ������� L M ��� �� ������ � ��� ��� ��� ��� �� � ��� � ���� ���� $ K� ��' � � ��� ��'��� ����� �� ��� ������ � ��� �� 2 � ���� ���� 7# � � � ��� ��� � ����� ��� ��� �� $ J� � �� ��� ��� ��� ���� ����� ��� ��� ��� ��� � � ���� �� Q � $ O� � ��� ������ �������� �� ��'��� ���� �� ��� � �� ��;�� � �� ������ � � � ��� ��& ������ ������� ��� �� ��� � �� � � � �� ��� � �� � � �� ���� ��� 4

ÖÐÔ Ö � ÎÐÑ /0 ''ÊÊÊÖ �� /& '�0 ''

ÊÊÊÖ �� /0O� � ���'��� ���� � � � ��� � � ���� �� ��� � ���� � ���� ���� G�+ �� �� � ��� � �������� � �������� ��������I

�� ������� ���������� � �� � ��� � �� ��� � � �� �������� �� ��'��� ���� �������� �� ��� � :# � � �������� ��� �� ��� � �� ���� $ ����� ������� ���� � � � ��� (��� ������� � � � �� Q � F8# $ %�� ��� ���� �� �������� ��� � ������ � ��� � ������ �� ��� �� ���� �� �� � � � � ���� (��� ������ �� � ,����� �� � ���' � ���� ��� �� GÀµ�¶y��~¶I E9 E# $ K� � � ������ � ���� ��� �� � �� , ����� �� ��� �� � ���� �� � ��� � �� � ����� � � ��������� � ��� � ��� �� $

K� � � ������ �� � �������� �Z�� G��� ��� ��I �� ��� ��� � ����� �� � ������� � ��� � �� � � �� ��� �� � � ������ ���� �� ���� ��� �� ������ �� � ��� � ����� G? °�° ���� ��� � � � � (��� ������� ��� ���� ��� � � �� ��� � �� � ��� �I � �� � � ��� 6:# $

l m» ijklmonqm ¼r½r tt¾ tl q mq p¿�� �)T ����� ��� ��� � � �� � � �;�� �� ������ � ���� ÀÁÂà GÀ ?Ä- B� Á �>´ �.Ä Â CB/?- B� à ./.I $ M�� �� )

� ������� ���� ��������� $ * ���� �������� �� ���� ����� ì¶À � � � � ���� ���� ������� � � �� ���������� �� � ��� ��� ��� � � �� ��� � ���� $ ��� �� � ������� ���� �������� ��� �� ��� 2 � �������� � � � ���� �� ������������� G~µ� �I $ ��� ���� �� ������������� �� ���� �� ������ �� $ � ���� �� �������������;�� ���;�� � � �������� � ��������� �� ������ ����� � �� � ����� '����������� � ����� $

M ���� �;�� �� �������� �� �� �)T����� 68# � ��������� ��� ������� �� �������� T���� �� EHH" �������� � � �� �)M ���� $ ����� �� �������� � ���, �� ���'����� ��� �� �� ����� � �� �)M���� �� ������ ������ �� ������ ����� ����� � � � �� ����� �� � � ���� ���� ���� � � � � � ���� ��� ��� �� ��� �� � ��������� ����� ��� �� � (� � ��� ��� � $ 3 � �� � � ����� �� �� ���� ���� � � �% 3 K íJK � � � � �� ����� ������ ����� �������� ���� ����� �� ���� � � �� '��� � �� � �������� � � � � �� � ������ �� ��� �� $% �� �� ����� ������� ����� ��� ���� � � �ÿ�� ����� �� � �� EHH7 � ���� �� � (� � ���� �� �� ��������� ������� � ��������;� � �� �� � ������ L KJ � � � � � ��������� $ ����� �� �������� ��� ������� � ���� � ����� JS L OK 8 $

% �� ��� ��������� ��& ���� � � � � ������� � ��� � � ���������� � � � � ����� ��� �� ������ 2 � � � � � ��� � �� ����� ������� ���� � )��� ����� $ ��� � �� ����� ������� ��� ��� � �� �� - ./01 $ �� �)T ������ � �� � ��� ��� ������ ��� ���� ����� � �ÿ�� ����� �� � $

Page 65: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

!6 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

K� � ���� ��� � �����;� � � �� ���� ��� �� �� ����� �� �������� � �� ���� ÿ�� ����� �� � T�����Å � � � ��� � ��,� �� �� �� ����� � ������� � � �� '�������� 2 � � ��;�� �� ����y� � �� �� ~����� � �� �� ����� ����L M $ %�� ����� � ���� �� ��� � ������� � ����� �� ��� � � ��� �� ������ ������� � �ÿ�� ����� �� � ������ �������� ��������;� �� � � � � �� ����� � � ���������� �� � � �������� $ M ��� � ��� �� � ���������� ����������� �� '��� � �� ��� ��� ��� $

ÿ� �������� �� � � �� ��� � ���������� T����� �������� � � � � ��� ��� ������ ���� �� ����� �� �������� ����� � ���� ������� $ ÿ� �� ��� � ������� �� � �� ����� �� �������� � � � ��� ��� ��� ���������� ����;���� ����� L M $

� �J �� Æ Ç�L������� È ���É���� � � �� �)T ����� ��� � � �)�������� �� �� �)M���� � �� �� ����� � � ��� � � �� �� ��� ������� ��

��� ��� 2 � ��� ���������� �� ������ $ ÿ� ��������� � �������� ��� ��� ��� � � � ������ �� �� ����� ����� ������ ����� ����� � ��� ���������� ���� �� �� � ������ �� ��� ��� � �� ������������� $

Êøïö÷÷ô�ö M�� ������ � � � ��� ���� �� � � ���� � � ������ �� F 2 � �ƶ~ y Ä$ M ��� � �� � �ƶ~��� �� � �� 2 �� � ��� ��� ��� � $ M ������� ����� � ��� � �� � ������� � ��� ��� � � ���� ��� � ��� ��� � �� ������� � � � � � ��� ��ƶ~ ������ � $

M ������(� � � � � ��� � �������� ������� ��� � �(��� ����� ����� �� � ������� �� � ���� � �� � � ���� $M ����� �� � ���������� � ������� �� ��� '����� � �� ����� � �� � ������ 2 � ��� ������ � ���� � ��� � ���� �� �� $

üDñûô3ö M�� �� � �������� �� �� ������� '��� ����� �� � �� ����� ������ $ 3 � � �� ������ ����� )����� ���� � � ���� ����� � $ O� �� � �� ��� � � �� ���������� � ��� ��� � �� hO�à �� ��� '������ ��Ë��� �¶�hO�à � � ���������� �� � ������ ��� � � ����� 4

hO�à {{] Ë����¶�¶O�Ã���Ì ~µ� � hO�ÃÌ ì¶À � hO�Ã Í hO�à �

Ë����¶�¶O�à {{] ���Ì �� ��� Ì � �ƶ~

ì¶À �¶ Ä Í¶�� ������ ��� 2 � ��� ��� �� �) � � �� � ����������� ¶� � ���� ���� � � �� �����)�� � � ������� ¶ Ä$ ~µ� � �¶� ������ ��� �� � )������� ��� � ����������� ��� G���� �� 8 $: $EI����� �� 2 � ������� � � � ~µ� � � � � �� � � ��� ����������� $ J� � �� �� �� ì¶À �� ������ � � �~µ� �$

bDóô�ö 3 � � �� ������ �;���� �� ����� ���� ����� � ���� � � � ��� �� ������ ����� ����� $

Γ ` e : τ

Γ ` sync(e) : τ

M� ��� � � � �� �� ������ ����;�� ~µ� � � � �� ��)�������� ��� �� ��� � �� ���� ���������� $

Γ ` e1 : int Γ ` e2 : τ V (τ) = φ

Γ ` get(e1, e2) : τ

M� ��� � � � �� �� � ������ ��� �� � �� � ���)�������� 2 � ��� $

V (τ)��� � ��������� ��� �)

������ �� ��� � ��τ

� �� ���� (��� ���� G?°�° �� ì¶À��� � ���� �����I $

M�� �� � �������� �� �� ������� � ����� �� ��ƶ~ � ���� �� ��� � ��À $ÎØÔÔ� ���ÉÉÉ Ê�� Ë Ê�Í ËËÙÐÍ ÊÑÎ��ÐÚÚ äÓÍÐÖ�%Í ÖÙÏ�TÐ!

Page 66: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d= d be `bf g_ hf ^] a ] jj¹jb � f h [º !F

Ï õý ò÷ øö ÷Dñò4ïýñð÷ôûðýñ Ð öñ� ðïýññö� öñû÷ öû òý��2ñðòôûðýñ÷ J� � �� �� �� � ������ � ����� ��� �2 � �������� � � � � ~µ� � $ ³ � ������� �

w)�;� � ~µ� � �� � ��� ��� � � � ����������� ��� � ��� ��� ������� 4

�� � ���� �� � ��@�?�>@@ �Ä �@/ m� 0>ÄÄC@?0./?>@ m� B. �.´C �w

�� ��� * � �� � � ��� $ M ����������� ��� ���� � ������ ���� 2 � ���� ���� ��� ��� (��� G���� ���� �� ì¶À I � � ��� ������� ��� ��� � $ K� � �� �� ����������� ��� �� � � �� � � �� �� � �� � � ��� (��� � � ��,� ��� �� ���� �� ~µ� � .�.@/ C@ .C/�� ì¶À �? °�° �� �� � � � �� (��� �� ���� � � � � ���,� ��� ��������� � � ��������� � ���� ���� �� ì¶À $ ��� �� � (���� �� �� ����� �������� � �� , ����� �� G���� ������ I ��� � � ��,����� ������ �� ��� � �� ����� � � �ì¶À ��� �� ���� �� ~µ� � $ ����� ���������� ��� ���� ��;��� ��� '���� � � � ��� , ������ 2 � �� � � $

y���� �� ��� � �� ������ � � � ���� ��� ����� � � �� ��� ��� ��� �� �� �� ����� � �� �)T ����� 4

£ � �¡¢  ¢��¬¤ �� ¤�¢� �¢ �ߢ¦ÖÐÔ Ñ Ð Ñ

ËGÓ Ï áÚ äÔÏØ Ð É ÙÔØ- ×� ÙÑ ÖÌÏäÖ + Ó Ì�ÐË × &

ÔØÐÓ ÒÐÔ áÖÌÏäÖ* & �-*G åÐÖËÐ �

å ''

*� �+�� � �� , ������� � ����������� ¶ �� ���� � ��������)��� ��� �� � ���� ������� O �� µ $

� �� ��� ������ ������ � � � � ������� �� � ����������� ��� ��� �� � ��� ���� � $��� � � � ���� ���� ��� ����� � ������ � � ��� �������� � �� ��� � ����� �� � � ������ ��� ��� � ������

������ ��� � ~µ� � ����� �� � � ���� ��� $ O� �� ��� (�� ��� ������� 2 � ��� ��� � ��� ���������� ����� ����)� ���� ������� � � �� ��� ��� � �� � ������ ����� ��� � ��� �� ������������ $ 3 � �� � � ���� ��� � �� � � � �� � ��� �� �� � ��� � � �� ��� �� � ��� ��� �� � (� � ~µ� � 2 � � (� � �� � $ K� �� ������� ��� ������� �� ����� ��� ������ � �� �� ����� ��� � ���� � �� �)T ����� ������ ��� � ��2 ��� �� �� ��+ ������� �� ����� � ���� �� � ����� � �� ���'���� � � ����������� � $

î ïý [ýñøö2ï ø 5ô÷Dñò4ïýñð÷� ö O� �� �����;�� ~µ� � �� � � ���� �� ����;�� �� ������������� � �� ���� ��� ��� � ������� � �������� ��� �� ��� ��� � ���� ���� � ���� � ~µ� � $ ����� ��� ���� � �������������� ��� ������ �� � ����'� � ��� �� �� ���� � ��� � ì¶À ;�� � ���������� ��� �� � ��� ������������ ��� ����� �� G�� ��� �� ��� ��� �� � �����I $

K� � ���N��� ���� �������� � � ��� ;��� ������ ��� ����� ���� ��� �� � ���� ���� 4 � ���'���� �� ����������� � $ O� � ��� ;��� � �

p�� � � �� ��� ��� � �� �� � ���� ��� 2 � �� �

w� �� � � � �����

�� � � �� ������� � �� �w + p

$ K� � ������� ���� ��������������� � ��� ������ � � � ���� � ������� � ���� ��

p + 1* � $ 3 � ���� � ��;�� � � ������ � � � �� �� � ��� � �� 2 �� �� � ������ � � �

����� �� ��� ��� ���� �� ��� � � � �������� 2 �� ���� '��� $ ÿ� ���� �� ����� ���{��� �� � �� ����w �� � ��� ��� ��� � ��� ���� ��� �� �� � ������ ,� �� ��� ���� � �* � ����� 2 ���� �� � � �� ����� ��� ����� � ����� ���� � � � $ M ���'���� � � ����������� � ��� �� �� � �� � ���� �� � � �� ����;���� ������������� 2 ���� � ������ 4 � ������ � ���� |�����} G� � � ����� � �� � ���� ��� � ��������I ��� ���� � � ��� ������ � �� � � ��� �� � ��� ��� � ��� � � �� � � ��� ��������� � �2 � |� ���}�� � �� � ������ �� � $

M �� �w

������ ��� w

)�;� � ��� �� ������������� �������� �� � ��� ��� � � �� �� ���� ��� ����������� ��� �� �� � ������ �� �� � �� ������ � $ M � ���� ��� ��ƶ~ * � � � �� �� � ������ '��� �� ����������� ��� ����� �� �� � ������ G* Q � I$ M �* Q � �� � �� �

w���� (��� �������� ��� � � �� � ���

��� ��� � � ���� �� ������ � �� �w + 1

$M ���'���� � � ����������� � � ��� �� � �� ������� ��� ��� �� � ������� �� � ��� ����� G� �� �� ���)

��� � � � �� ��(��I � �������� � �+�� ��� ����� ����� ��� ��� ��� � $

N3òöóûðýñ÷ öû òý��2ñðòôûðýñ÷ ÿ� �� � ���������� � � � ��������� �� �������� ��� � ~µ� � $ 3 � �� ���� � ����� ��� � ���� � ��������� ��� �������� �� ��� ��� � ���� ���� ��� �������� ��� � ì¶À G? °�° � � ���� ��� � ������I $ 3 �� �� ���� ��� � � �� � ��������� ��� ������ ��� �� ���� � ~µ� � � �� � �� ���� �� � �

Page 67: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

!7 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

� ����� �� $ O� � � ���� �� �� � � � ��������� � ����� � �� ������ �� ���� � ��� ��� � ,� �� � �� � ��� �� $ O� � ��������� �� ���� �� 2 ������ � ��� � ����� ������ � � � ì¶À � ����)� ������� 2 � ��� ���� � � �������� ����)� ��a � � $ M ��������� ����� ��� ���� ��� �� G� � ì¶À � � � �� ������� � ���I � �� �2� � ����� ������ �� ��� ��� � ��� �� ���� � �{�� �� ì¶À $ ÿ� �� ����� �� ���� �� ��� ��� �� ���� ��� ��� � ��������� �� �� $

Ò ñ ö3ö� óõö M� ��� � ���� � ����� � ������ �� �)T ����� $ K� � �� ������ �0

� � ��� �� ��  ���� ���0

$ K� � �� � ��� ���� ������ � � �� ��� ��� ���2 ∗ (local − 1) + 3

$ K� � � �������� � �� � �� � ì¶À � ���� ����� ���� ������ ��� ��� ��� ��

x + 1��

x + 22 �� � ������ � �� $

�6�­ à£�ÖÐÔ Ñ - Ñ

ËGÓ Ï áÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ ÑÑ � ÔØÐÓ �ÐÖËÐ áÒÐÔ - * $ ÑÎÌÚ áÓÖÙÒØÔ ÊÖÌÏäÖ × &åå áâ =�? & âå* áÒÐÔ - * , ÑÎÌÚ áÓÖÙÒØÔ ÊÖÌÏäÖ × &åå áâ =�? � âå

å ''áÑ ÓÖÙÒØÔ ÊÖÌÏäÖå ''

� úò2ï÷ðýñ ÷óôûðô õö %� ��� �� ������������� ~µ� � �� � � � �� ���{��� 2 � �������� � � � � ��� ~µ� �G�� ��������� � ������ � ��� ��������I � � ' � ��� �� �� ����� ������ �w �� ~µ� � ������ � ��� �� � (� �� � � ��������� $ 3 �� � � � ���� ���� ����� 2 � � (� � �� � �� � ����������� ��� �� �� � ������ ����������� $

K� ���� ��� � � '������ ~��� ":# ��� ������� 4�¦�¢«

ÖÐÔ ÎÐÏ ËÏäÓÑ á! � ÙÓÔ ÖÙËÔ å ÑËGÓ Ï á ÙÑ ÖÌÏäÖ ÑÑ �

ÔØÐÓ /!0ÐÖËÐ ! ��áÒÐÔ áÖÌÏäÖ×& �ËÏäÓÑ ! ååå ''

P ���� � ��� � �� � � ��� ��� (��� ì¶À ���� ��� ����� ������� � �� ���� � ~µ� �$ �� ����� �� � �� �������� � � � � ����'���� ��� ������� ��

n��� ��� � 2

1$ 3 �� �� ���� ��� � ��� �� 2 ~��� ���� ��� �� �����

�� ������ � ��������int list list

�� �� ��� ��� ��� �� Ç � ������ � �� $

© ð� ðûôûðýñ÷ øö �ô� õ�Z õð�4û %� ����� ������ �� ��� ������� �� ���� ��� � ��� �������� �� �� �)T ����� $M ����� � ����� ��� ����� � 4

5 � ý øðÔòôûðýñ÷ ó4D÷ðE2ö÷ öû òý��2ñðòôûðýñ÷ ÿ� �� � ���������� � � � �+��� �� � ��� �+�� �� 2� �������� � � � � ~µ� � �� �� ���� ���� �� ����� ������ � � � ì¶À $ �� �)� ������� (��� ��������� ���� ���� '��� � ����� �� ������ ����� � ��� ������ � �� �� �)T ����� $ K� � �� � �� ��� � �� ����;� � �� �������� ���� $

5 ö�ÿ ýÕûö� öñû øö÷ ÿ õý ò÷ øö ÷Dñò4ïýñð÷ôûðýñ P� ����� ��� � � ' � � � ��� � ��������� ����� �� �)� ��� � � ���� �{��� ��� �� ~µ� � ��� ����,� ���� �� �� ��� $ �� � ���� �� ��� � ������� ��� ������ �� �'� ���� L M $

5 �öû � ýñý� ýïó4ö 3 � � (� � � � ����� ������ � � �� �� ������ �� � ����� ì¶À ��� � ���� ����� $����� �������� ��� ���� '���� $ M� �����;� � �� ���N��� ��� �� ���� �������� � �������� �������� � � ��,����� ������ �� $

� �J �� Ö ������� �f � ��������� × ��� ������ ��f � È ���É�x ���� �������� �������� ��� �� ������ �� ������ �� ��� �� ������ ������� ����� � �ÿ�� ����� �� � $ K� �

�� �� � �� � ���,��� �� �� �� ����� � �������� $ % � ������ � � T����� ��� ��� �� ��� � ������ � �ÿ�� ����� �� � ������� �� ��������;� � � ������ $ M�� � ���� � ����� ����� 2 ���� �N�� 4

Page 68: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d= d be `bf g_ hf ^] a ] jj¹jb � f h [º !H

5 � �� ��� ��� ��� � � � � ���������� �� � ��� � ��� �5 � ��������;� � �� /1��.mD � � � ��� ��� �� ��� ��� ��� ��� (��� �� � ���� ���� � ���� �5 � ��������;� � �� D>0�/D � � � � ������ �� ��� (�� �� �� ����'��� ��� ��� ���� �5 � ��������;� � �� � �������� G��à ~R��I ��� ������� � � � ����� ��� ���������� ���� �� �� � ������

� � � �� � ì¶À �� � � � ���� ���� �� ��� ��� � � �� ��� (�� $M ���������� �� ��� � ���� � �� � ���)�������� � ��� ������ �� �� � ������ �� � � �������� ���� ��

�� �� � ����� � ����� '� ���� ��� ��� ������� ����� ������� � �ÿ�� ����� �� � G� : $96 ��� ����� ��I $*� ������� �� � ���� � ����� �� �������� � ���� ����� �� � ���� �� E999 ������ $

¤ ö÷òïðóûðýñ øö õ 5ð�ó õôñûôûðýñy� � ��� ������ � � � ���� �� ���� � � ��+ ������� � ����� $ J�� �� � ��� ��� 2 ������ ��� D>0Ø�/D

y �K íJK� �� �� � ������ � ���{� � ������� JK �� �� � � ��� �� � ��� �� �� � ��� ���� ��� ��� � $ J�� �� ������ ����� � � � �� � ������ ÿ�� ����� �� � T����� G��

02

nodes − 1I ���� � � ���

G������ JK� � � ��� �� � ���I $ K�� � � ��+ ������� ������� � � � � (� � ������ � � � � ���� �� ���� � � ��� (� � ������� � � �� � � �� � � ���;�� � � � ��� �� � ��� ��+ ����� ��� ���� $

�ñ÷ûôñòö÷ ø 52ñ óïý�ïô�� ö ��� � ������ � � � ������ � � ���{� �� ������ �� ������ � G� ����)���� � ������ � �I � ���� ��� � � ������ ������ G�����I �� ����� ����� F �� � �ƶ~ y Ä �� � � � �� ������� � ������ � � 4 ��� � � ��� � ��� ������ JK �� ��� � � ��� �� � ��� � ���� � � ���� ��'��� ���� � � ��� � ��� ���� ������ � $

% �� ������ �� ������ � � ��� �� � ���� �� �� � /1��.mD 4 � /1��.m � � � � ���� ���� �� ��� � �� ��� �������� � /1��.m � � � �� ����� � �� ��� (��� � � ��� ���� � ���� ������ � $ M� ����� ��� ������ �� ��� y �K íJK$K� � �� � ��� (�� ��u � � �� �� /1��.m ��� ��� � � � ��� �� �� � � ��� ��� $ ® �� � � ����� ��� G� ��� ���������� �� �� �������� ��� � � �� �������� I �� ��� ��� G� � ��������� I ��� ������ 2� ��� ���� $

Nñ�ýð ø 52ñö ïöE2Ùûö % �� ��� (�� ��� � ���� ���� �� � ����������� ����� � ��� � ì¶À ��� � �������)��� ��� �� �� � ������� ������ � � (� � ��� �� ������������� G~µ� �I $ % �� ��� (�� ��� ��,��� �� ��� � ��� �� � ��� ���� G

cI � ��� � � ��� �� �� � G

wI �� ��� � � ��� �� ì¶À G

gI $ ® �� � ���� ��� G

w�s

�g

I �������� �� ���� �� ����� � � � � ��� ���� � �� �� /1��.m $

� úó ýñ÷ö Ú 2ñö ïöE2Ùûö M� /1��.m � ����� � �� ��� (��� ���� � ��� � ����������� ��� ���� 2 � �������� ��� � ����������� ��� �� �� � ������� ������ ����� ��� ~µ� � ����� � ��� � ��� (�� $ K� � � '��� � ��� � �� �� � ��� �� ������������� � �� ��� ��� ��� (��� � ����������� Gì¶À ¶ ÂÃ�� �I �� � ��� ���������� �� � '��� � �� '��� �� ��� G³� �� yd ¶I �� ���� � �������� ��� � ���� ����� 2 � ��� $ M�� � ��� � ì¶À ������ ��� 2 � ������ �� � ���� $ ® �� �� ��� (�� ���� (��� � ��� � � �� �� /1��.m��� ��� �� ����� �� � '��� �� �� ������ ������ 2 � �� � ��� �� ��� � ³� �À 4 �� $ O� ���� ������������ ��� � ��� ��� � �� ��� ���� ������ 2 � ��� ���� $ O� �� �������� ��� �������� � ��� � � � � ���� � �� � ��������� ��� ������� 2 � ��� ���� � ����)� ��� �������� �� ��� ��� $ P ���� �� � ~µ� � � ���;�� � ���� ������� ��� '��� �� ��� �� �� � ��� � �� ��� ��� (��� � ����������� �� ��� ���� $ M� � � ��� ��ì¶À ����� � � ���� '��� �� �� ������� $ M� � � ��� � ~µ� � � ��� �� �� ����,�� �� �� � ��� ��� � �� � ��� ������ ���� ��� �� � (� � ��� �� ������������� 2 �� �� � ������ $

K� � ��� �� �� ��� ��� �� � ������� ����� ��� � �� ������������� � �� ���'���� � � ����������� � ���,��� ��� ���� �� �� � ��� ��� ��� � $ 3 �� � � ���

p���������� ���� �� �� � ������� G���� � ��

'��� �� ���I ���� �������� $ P ���� �� ����� � ����� �� � ������ �� �� '��� �� �� ������ ����� 2 � ~µ� � ���� $

Nñ� ðïýññö� öñû øö òý��2ñðòôûðýñ M ����������� ��� �� �� � ������ � � � ~µ� � ��� ��� 2 � �������� ~µ� �$ O� � �+�� �� � ��� ��� �+ �� � ��� �� ��� � �� ������ �� �� ���'���� � � ����������� �� � ���� �� 2

1�� ���������� ��� � � � ����� $ 3 �� � � � ��������� �� ������ ����� � ��� � ��� � $ %��

Page 69: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

69 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

����� �� ¯��� � ���� �� ���� ���� 2 ������� ��� �� � ���,���� � �� ����� � $ K� � ������ �� �� ���� (�� ������� �� ���� �� � '��� �� �� ������ ������ � �� ��� �� ��� ���������� ��� �� � � $ K� � �'��� ��� ���������� ���� �� �� � ������ ���� � ������� �� � '��� � �� � ��������� �� ������� �� � �� ����à ~R�� $ M '������ À��~Àà ��ì �� ��� � ª� yd ~Àà ��ì �������� ��� ��� �� ÿ�� ����� �� � G2 � ������������ ��� ���I � �� � '������ Âà ���~Àà ��ì �� ��� � ~Àà ��ì yd ª� �+ �� � � ��� ������ ������� $ M� ���� ���'��� �� ��� ������� ���� � ���� �� �{��� �� ��;��� $ M ����������� ��� ��� '��� �� ��� �� � � � �� (���� � ��,� �� � ���� '��� � $ ® �� �� ��� (�� ���� (��� ������ � � '��� �� �� ������ ����� ��� ���� ������� $M ��� � '����������� ���� ����� � � ���;�� �� ���� ������ �� ��� ���������� ��� $ K� ���� ������ �� ����������� ��� �� �� � ������ � � � ~µ� � �� � � �� �� (��� � � ��,� �� � � ����� � �+�� �� � ��� $

bDó ö÷ øö÷ ïöE2Ùûö÷ M� ��� � ��� ��� �� ���������� �� ��à ~R�� � ���� �� ������� ���� �� � ����������� � ��� � ����� �� � ���� �� �Z�� � � � �� ����� $ M� ��� � � ��� ��� �� � '������ ÂÃ���~Àà ��ì ��� ª� $K� � �� �� ���� � ���� ���� � �� ��� � �� � ��� � ���� ���� ���� (��� �� ��� ��� �� � ����� G��'��� � ��������� ��� ����� �I ���� � ����� $ K� � ��� '��� �� ��� ���� ������ � �� ����� � �� ��� � ³� �À yd ª� ���� �� ��� �� ������ � � � �� ��� ��� '��� �� ��� $ P ���� �� ��� � ����� �� �� ��� ����� �� 2 �� G��� � �� ��� � ���I $ L �� �� ��� � � ��� ��� �� ���� �������� ��� ����� G�� �� � � � �� (��� ��'��� 2 � �� ������� I $J� � � ����� �� � ��� ��� ��� ��� ��� � � ' ��� ����� � � ��� � �2 � ,� �� � ���� ���� � �� ��� ������ ����� �� ������ � �� ���� $ *� �� �� ���� ���{� �� ��� � ����� G��� � ��'��� ���� � ������� � ����������� ����� � ��� �� ì¶ÀI $ L �� �� ����� � � ������ � �� �� � ���� ������� � ��� ����� � �w �� � (� � ������ G� � � ���������� ��� �� '��� �� ��I � � � (��� ��������� �� ��+ ������ ��� �� $ M ����� ���� ���� ��� ���� � � 4

7�� ­ ¡¢¡­ ¡¬à§�ÖÐÔ Ñ Ò - Ñ

ÖÐÔ Î Ñ ËGÓ Ï áÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ Ñ � ÔØÐÓ -ÐÖËÐ ÒÐÔ - ÑÎÌÚ áÓÖÙÒØÔ ÊÖÌÏäÖ × &åå

ÙÓ Ò - ''ÖÐÔ Î Ñ ÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ Ñ � ÔØÐÓ Ñ �ÎÙÓÔAÙÓÔ &Y

ÐÖËÐ Ñ �ÎÙÓÔAËÔÎÙÓÒ 9>ÐÖÖÌ 9 ''

M '������ ������  ��� � ���� ����� 4 �ª� yd ª� � yd ª� yd ª� �� à �� ��� � ³� �À $ K� � �� ��� ��� �0

� O ��� � ������ �� � � � �� ��� ��� �1

O ��� �� ��� � ~Àà ��ì $ ® �� �� ��� ��� �1

������ � ��� (��ì¶À O ÂÃ�� F � �� ��� ��� �

0���� ��� � ��� � ���������

18$ L ��� �� ��� ��� �� ��� ��� �

1�������

�� �{�� �� ��;��� $ 3 �� � � � ����� ���� �� ��� �� ��� ���� $ K� � ������ � � � ��� ����������� 2� �������� � � � � ì¶À ������� (��� � ���� ������ $

� úò2ï÷ðýñ ÷óôûðô õö M ������� ���� �� ��� � ~µ� � � �� � ����������� ��� �� �� � ������ 2 � ���������� � �� �� ����� ������ G� (� � ~µ� � ������ �I $

N3ûöñ÷ðýñ ÷Dñûô3 ðE2ö��� � � � � � �� ��y� � �� ������ ��� ��� � � � ��� �� ������ ����� ����� � ����� $M�� ��� � ���� ���� ��,���� �� � B�Û �� �� ��� ������� $ % � B�Û �� �� ��' � ��� '� ��� �� � '������

ë�¶O¶Ã �� �^¶ $ M�� ������� ���� ��,���� ��� ��� �;���� 2 � �������� � � � �� �������� hÜ´hݯ $ ��� � �;��� �� ����� � �� ������� � �� ����� ������ �� �� ����� ������ � � ����� � � ����� ������ $

ÿ� � � �� �� �� ����� ������ � ~µ� ��¶O�à � 2 � ��� � ��� ÿ�� ����� �� � � � � ��� ����������� ��������2 � �������� � � � � ~µ� � �� � � ��;�� � ����� 4

Page 70: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d= d be `bf g_ hf ^] a ] jj¹jb � f h [º 6 E

Ç ��³ ¶ ~µ� ��¶O�à ] ÞÃ��� �à �h�Àõ ��à ¶�À¶ ìÃ�� ߶O�à ¶~~��� ß PhÜ´hݯ Þ��à�� { ~µ� ��¶O�à ¶O�à P

¶O�à {¼¼ ß~µ� �ß P ß �ß P � ] ~µ� ��¶O�à P ß�ß yd

���¿¿ P

~µ� ��¶O�à {¼¼ ßì¶À ß P ¶ ] ~µ� ��¶O�à P ßÂà �� ß P � ] ~µ� ��¶O�à yd

���¿¿ P

M �;��� ~µ� � ��� � (� � ���� �� �������� � � � �;��� ¶O�à �� � ��� � ��� � �ÿ�� ����� �� � $ M����� � � � ~µ� � �� �������� � � ��� ~µ� ��¶O�à $ ����� �� ����� ���� � ������������ ��� � �� �)���������� � ������� ¶O�à �w ��� ����������� ����� � ���� �� �� ������ ������� ���� ������� $

©ö � ý ø2 õö ¾��ìRÀ

M� � �� �� ¾��ìRÀ �;�� ��� ��+ ������ /1��.mD � �� ����� � �� ��� (��� � � �� � ������ ����� ��� ��� � ����,��� �� ��� � ��� ��� �� ����'����� $ ��� � ������ � � ÿ�� ����� �� � T����� ���� ,��� ��� ��� ������ � �� �� 2 � '������ ���~¶�¾��ìRÀ � � � ������� � ,� �� �� � ��� ���� ������ � $ M ������� �� ��� � �� �� � ����������� ��� �� �� � ������ ���� ��� a���� � �� ���� 2 �������� � � � � �� �� � ����� �� ���� ���� � � ���� ���� ������� $

M� ��� � � ���� ��� ��,�� � � � ���� ��� ��� ��� �� ����'����� �� ��� �� ��� ��������� $

�ßà� �� �6¦�à� ¡¢�ÔG�Ð ãä !äÖÐÍÎ Ñ VäÖÐÍÎ ÌÑ ãä 8 �-Ó ÌÑ Ð-Ó ''Ð-ÏÐ�ÔÙÌÓ ;ÐÚ ÌÔÐ�-Ó ÌÑ Ð-Ó ''Ð-ÏÐ�ÔÙÌÓ BÐËÔÐ��GÓ Ï ''

% �� ��� (�� ì¶À ��� ��� ��� �� �� � �� � ���� 4

¤¬�Ý����ÖÐÔ �ÎÐ1ÍÐËÔ Ù Ó AÒÐÔ Ñ�ÐÏÌ�Ð á ±äÎËØäÖ ÊÑÎÌÚ AËÔÎÙÓÒ áÎÐ1ÍÐËÔ Ù Ó AÉä!Ð Ó AËGÓ Ï Ó AÒÐÔ å �å

�w ög³¶~À ��� ���� ��� ��� � � �� ì¶À � � ��� ��ì¶À ��� �� ~µ� � � � ��� ��~µ� � � � � � �� �� � ��� ��Q�Ƕ $ M '������ ÂÃ���~Àà ��ì ��� �� ��� � 2 ����� �� ��� '��� � ������� �� � '������ ƶ ��ƶ,���� �� ª� Ç ��³¶ $ M� ���� � � � ~µ� � ����� ��+���� � ��� �� � � ������� ���� �� � � �� �� ����� ������ $

Ò ñ ö3ö� óõö øö ûïôø2òûðýñ

M ��� ���� � ����� ������ ��� ������ � � ÿ�� ����� �� � T����� ����� ��� !7I $

Page 71: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

68 [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

ଡ7¬�­ ­ � ¡è��¢�ÖÐÔ AAAÖÌÏäÖAËØ ÙÑÔ Ñ ááÓÖÙÒØÔ ÊÓÍÚ AËGÓ ÏåÖÐÔ Ñ - Ñ

ÖÐÔ áAAAÙËAÚ äÙÓ � AAAÉAÓ � AAAËAÓ � AAAÒAÓ �Aå ÑÓÖÙÒØÔ ÊÒÐÔAØäËØAËGÓ Ï áå ÙÓÖÐÔ AAAÑÍÓ AËGÓ Ï AAAÉAÓ AAAËAÓ Ñ

ÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ ÑÑ � ÔØÐÓ �ÐÖËÐáÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ × & ÑÑ ÓÖÙÒØÔ ÊÖÌÏäÖ ÔØÐÓ - * $

ÐÖËÐ ÓÖÙÒØÔ Ê�ÎÐ1ÍÐËÔ áÓÖÙÒØÔ ÊÖÌÏäÖ × &å AAAÉAÓ AAAËAÓ &å *áÙÑ ÓÖÙÒØÔ ÊÖÌÏäÖ × & ÑÑ ÓÖÙÒØÔ ÊÖÌÏäÖ ÔØÐÓ - * ,ÐÖËÐ ÓÖÙÒØÔ Ê�ÎÐ1ÍÐËÔ áÓÖÙÒØÔ ÊÖÌÏäÖ × &å AAAÉAÓ AAAËAÓ �å ÙÓ

ÙÑ AAAÙËAÚ äÙÓ ÔØÐÓÙÑ AAAËAÓ ÑÑ � ÔØÐÓÓÖÙÒØÔ ÊÎÐËÐÔAÐÓ!A ÍÑÑÐÎ áå 'ÓÖÙÒØÔ ÊËä!ÐAÏÖÌËÍÎÐ á� � ÊÚ äÒÙÏ áÑÍÓ áå ×� - * &� åå 'ÓÖÙÒØÔ ÊËä!ÐAÏÖÌËÍÎÐ á� � ÊÚ äÒÙÏ áÑÍÓ áå ×� - * �� åå 'ÓÖÙÒØÔ Ê ÐÒÙÓ AËGÓ Ï áAAAÖÌÏäÖAËØ ÙÑÔ * &å '

ÖÐÔ AAAÎÐËAËGÓ Ï ÑÔÎG AAAÑÍÓ AËGÓ Ï ááÓÖÙÒØÔ ÊÉä!Ð å áAAAÖÌÏäÖAËØ ÙÑÔ * &å É ÙÔØÓÖÙÒØÔ Ê;ÐÚ ÌÔÐ�-Ó Ð ×� ÓÖÙÒØÔ ÊÐÓ�AËGÓ Ï áå ' ÎäÙËÐ Ð8 Ð ×� ÓÖÙÒØÔ ÊÐÓ�AËGÓ Ï áå ' ÎäÙËÐ Ð

ÙÓÓÖÙÒØÔ ÊÐÓ�AËGÓ Ï áå ' AAAÎÐËAËGÓ ÏÐÖËÐ ÙÑ AAAËAÓ ÑÑ AAAÖÌÏäÖAËØ ÙÑÔ * & ÔØÐÓAAAÑÍÓ AËGÓ Ï ááÓÖÙÒØÔ ÊÉä!Ð å áAAAÖÌÏäÖAËØ ÙÑÔ * &åÐÖËÐ ÎäÙËÐ ÓÖÙÒØÔ ÊBÐËÔÐ��GÓ Ï

ÐÖËÐ ÙÑ AAAËAÓ ÑÑ AAAÖÌÏäÖAËØ ÙÑÔ * &ÔØÐÓ AAAÑÍÓ AËGÓ Ï AAAÉAÓ AAAËAÓ ÐÖËÐ ÎäÙËÐ ÓÖÙÒØÔ ÊBÐËÔÐ��GÓ Ï

ÖÐÔ A Ñ Ñ ÓÖÙÒØÔ ÊÖÌÏäÖÖÐÔ A Ñ ÓÖÙÒØÔ ÊÓÍÚ AËGÓ Ï �Ñ ááÓÖÙÒØÔ ÊÓÍÚ AËGÓ Ïå * &

M� ~µ� � ��� �� � �� ��� �� � ��� (��� � ����������� �� ����,� �� ���� ���� � ���� �;�� ��� ���� �� �~µ� � $ M� ���� � ~µ� � ��� ��� ���� ��� � '��� �� �� ³��~µ� � � ��������� ��� � � � ��� �� �� � ����� � � �� $ ��� � ì¶À ��� ��� �� �� � �� �� 2 Æög³¶~À $ M ��� � �~�� ��� ����� � �� /1��.m ������� � � �������� �� � ���� �;�� ������ �� �� �� ����� ������ $ 3 �� �� ���� ��� � � ����������� ��� �� �� � ��������� � ������ �� � '��� � �� '��� �� ��� �� � '������ ~�Ƕ����~³Ã¶ � � � � ���� (��� ���������� � � � � ������� ��� ��� (��� ' � ��� $ ��� '��� �� ��� ���� ���������� �� ��' � $ 3 �� �� ���� � � � ~µ� � � �� ���� � �� ���� � ��� �� �������� $ 3 �� �� �� ��;� � � � �� �� � � ��� � ~µ� � ��� ��+ ����� �� ��������ݶ~À ¶Æ˵� � ��� �������� $ P ,�� � ��� � ������ �³��~µ� � ��� � ��� 2 � � � $

© ð� ðûôûðýñ÷*� �� ������ �� � ������� �������� � �� � �������� � � (� � �������� �� ��� �� � � � �� ì¶À � �)

��� ����� �� � � (� � �������� ���� �� � � � � ��� ~µ� � ������ �� $ 3 � �� � ��� ì¶À ������� (��� ��� �� ����� ������ � � � ~µ� �$ x ��� ���� � � �������� � �ÿ�� ����� �� � ������ � � ������� � ����� �� � ��)���� � ����� �� � �� ������ ������ ������ ��� � � � �� �� � � � � �� ��� (�� ���;�� � '��� �� �������� ����� 2 � ��� (�� �� ���� ���� '��� �� �� $

� �J �J ���â��f �� ��� �� ����� �����ÿ� �������� �� � ��� �� � ����� ����� �� � ��'��� �� �� ��� �� ����� �� �� � �� ������ �� �� �)T ����� $

x � � �������� � � ��� '�� ������ � ����� �� ��� ���� �� � ����������� � � ���� ����� �� ������ � ���� ��ÿ�� ����� �� � T�����

Page 72: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

c d= d be `bf g_ hf ^] a ] jj¹jb � f h [º 6:

îöï[ýï� ôñòö÷ÿ� �� ������ ��� ������ � �� �� ���� ��������� ��� :6# �� 68# $ M ���� �;�� ���� ����� � �� �� � ����� ���

� �ÿ�� ����� �� � T����� ��� ��� ����� ��� ����� � ������ 4E$ � ��� ��� �� ��� ��� � ��� � ���� � ��� �� � ��� �� �� ���' � � � � '������ �� ¾ ����� ��� G ����I �8 $ � (� � � � � � �� ��� � �� ������� �� ����� ������ G� �� I �: $ � (� � � � � � � ���� � GQ ��~¶¶^ �� � �¶I 4 �� ���� ��� ������ � � �� ��� �� ������ �� � ��� � � �

� ,���� ����� $ M� ����� � ��n

��� �� � � � � � � �� � ��� $y� � �� ������ � �� ��� ��� ��� ��� � � � ���� �� � ��� ��;�� G�� ��� ��� � ����� �������� ��� �

� (� � ��,� ����� � �������� �� ��������� 4 J����íM�� � I $ K� � ��� ������ � �� ÿ�� ����� �� � T����� ������� �� ��� �� ���� � � � $

M� '�� � �� ������� ��� � �� �� � � ��;�� � ����� 4� ����íÿO ������ �� �

ÿ�� ����� �� � ��� G ���ã ������ Iÿ�� ����� �� � T����� �í� íW ���

'�� � (user+system)ObjectiveCaml(real)ObjectiveCamlF light(i/j/k)

�wi

��� �� ������ �� ������ � �j

�� ������ �� ��� ���� �� ��k

� ���'���� � � ����������� � $

äåæçèéêëåìí ����� ,�\ � R\���W ��'�åîïðñç òç óôõìçö 9 R�� E R�� E R�� :9 R���÷ðø çùæëóç úôï è 9 $: F $F 6 $F E:Eí Eí9 9 $7! E9 ûü ­ýýþ H $! ûü ­ýþ EH ûü ­ÿ� þ8í8í9 E$8 F $8 û� Ðü ýþ 6 û� ­�þ EE$: û� ­�� þ"í"í9 E$7 6 û� ­� þ " $7 û� ­� þ EH ûü Ðÿ� þ7í7í9 : $8 6 û� ­� þ 6 $! û�þ :9 ûü Ð �� þ

¸ ¹º » 8 $E" 5 ® ��� �� �����

O� �� �� ��� �� ��� ��� ���� ����� � �� � � �Z� �� � �� � ����� � � � � ����� ���� ��� �������)��� ���� �� �� � ������ �� � � � �� ����� ��� '��� �� ��� � � � �� ��� (�� $

bDóô�öM�� �� � �� ��������� �� �)T����� �� ÿ�� ����� �� � T����� �� ���� �� �Z��� � � ���� �� � � �����

� � � �� ì¶À � ���� ����� $ ÿ�� ����� �� � � �� � ����� ���� �� ����� �� E!H# � � ������� � ��� ������������� �� � �������� 4 ��� ����������� |���������} G�� � � � ��������� I � ���� ����� ���� ������ ��� � � � ������������� � � � ��� � �� ���� �� ��� � � �� ��� ����������� |���)���������} G�� � � ��� ���������I $M�� ������� �� ��� � � � �� ���������� ���)�������� � � ���� (��� ����������� ��� �� �������� �¶À $K�� � � �� � ��������� �� ����'��� ���� �� ������ � �� � �� � ���� � ����� � �� � ��� � ��� � � �����'��� �� �� ���������� ��� �� � ì¶À �� � � �� ���������� �������� $

M� ����,���� ���� �� � ��� ~µ� � ������ �� � ���� �� ��� � ������� �� L M $ %�� ����� �� ¯��� � �� � ���� E89# � � � ���� (��� ������� � � � ���� �������� $ M� � � ì¶À � ���� ����� � � � ��� (��� ����� ���� $

Ê2ûïö÷ ûïôðû÷ øö óïý�ïô�� ôûðýñÿ�� ����� �� � � ���;�� ��� ����� �� ������ � ���� �� � � ���� �� � � ��� � � � ��� ��� ����� � ���

��������� �� ����� �� ��� /1��.mD$ J� ����� ���������� �� ��� �������� ��� ÿ�� ����� �� � T����� � � �� ��� ��� ��� ��& ���� $

Page 73: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

6" [\ ] ^_ `a b c d be `bf g_ hf g b ` [ hi ^_j]`_ hf kba g i j

M�� � �� ��� ��� ����� G� '���� ��I � � ���� (��� ����� �� 2 � � �� ��� �� � � � ��� � � � ����� ��� � �� �� � � � �� $ % � '���� � � � � (��� �������� �� � � �� '��� �� �� $ P ��� �� ������� �������� �������� ���� ��� ��+������ ��� � ~µ� � ���� ��� 2 �� � �������� � � � '���� � $ M ������ ����� ����~R �ÂÀ � �������� � � � ��� � � � ��� � ���� (��� � � ���� ��� �� � �������� � � � � �� �� ��� ���� $ % �� ������ ���� � � � (��� �� |���������} �� � �� � '���� � � � ��� ����� � ��� �� �� � � ��� E:H# $

K� � � ���������� ��� �� � � �������� ��� ������ �������� � � �� �� ��à ~R�� � � �� �������� �� ��� ��� ������ � � �� �� �w � ���� ��� � ���� ��� � � �� ���� � � � (��� ������ ���� � � � Q � $ 3 �� � � �������� ���� �� � ���� �� � ���� �� � ������ �� � ��� �� � � �� � ������ 0�.D1 � �� ������ � � $ %�� ��� ���� ���� � ������� � ���������� ����y� � � � �� ���� �� �������� �� ����� �� ���� �� �� ������ �� |��R ���}�� � � ����� � �� � �������� $ M ����� ��� ���� �� �� � ���� �� � ���������� �������� �� ��� ��� $

M� � ���)�������� '�� � ����� � ��������� �� ������ ����� � � ����� $ K� ���� ��� �� �� � ������������� � ��� ~µ� � � ���� ���� �� ���� � ��� � �� �� � � � �� ������ ���� ��� �� ����� �� ���� ��� ����� ��� ~µ� � $ 3 �� � � � � ������ � � � � � ,��� ������� ��� � ���� (��� ��� � � $ x ��� ���� �� � ���)�������� � � � ���� 2 ���� ��� �� �� �� � � ��;��� ����;��� $

¤ ð÷ò2÷÷ðýñ �� �������� � ���� (��� � �� � � � � ��� � ������� � 4 � � � ��� ���� ����� �� ��)��������� ��� ÿ�� ����� �� � T����� �� � � � �� ������� � ��� �������� � ���������� ����;��� ������� ��� ����� '��)�������� �� �� � ����'� � ����� $ �������� �� �� ������ �� � � ���� (��� �������� ��� � � ���� ��������������;��� �� � � S OL M FF# $ ÿ� ������� � � ���� �� � � �� �������� � � � ���� � ��������� �� ������� � � �������� ��� '��� �� ��� ��� ������ ��� 2 � ������ � ���� ÄCB/?A/1��.mD$ ��� ��� � � � ������� ��� ����'��� ����� �� ������ � � � ��� ��� �� ����� $

M� � ����� � ��� �� � ���� �� ��;� � ����� � � � ���� � ���, ��� �� ��� ���� �� ������ � �� ÿ�� ������� � T����� � ��w � �������� �� � �� ������� $ *� '�� �� � ����� �� � ��� � � �� ���� � � � � � ���� ��������������;��� � �� � � �� ���� ��� S OL M � K :M ! E# $

�� �)T ����� �� � � �� ��� �������� �� � � � ����� �� �� ���� $ � ���� �������� ��� � � �� ������� �� $ ÿ� ��� ;�� � � ���� �� ����� �� �������� � ������ ���� �������� � � � '������ � ����� ���� �� �������� �� �� ������ ���������� ����;��� $

l m� �qmpt�onqm q ljklmo nqmo lk k�¼rlM�� �� � ���������� � ����� � �� � �� � �� �� �� ����� � ~����� � �������� ��������� ��� � �� ��� ��� ��� $

��� �)� � ��� �� �� '��� � �� � ��� �� ����� ���� 2 ����� �� �;���� � ������ ����� �� � � ���� ���)�� �� � � � ��� (��� ��� � � �� ���� �� ��� �� �� ÿ�� ����� �� � $ ��� � �� ���� ��� �� � �� ����� ������� �� � �� � � �� � ����� � '������ ����Æ �� ~����� � $ x ��� ���� �� � �� ��u��� � � �� ����� ���� ������� ��� � ����� �� � ��� ��� �� ��'��� ���� �� ��� � 4

5 ~����� � 4 � �& ��� ��� ��� �� �� ������ ��� �� � ��� �� O�� � �� 2 �� �� ��� ����� ���� ��� ��� ��ÿ�� ����� �� � �5 ����� � 4 ��� ��� �� ��� �� ���� ����� � �� ��� ��� � ��� ����� �5 � �� 4 � �������� � ì¶À � ���� ����� �� � � � �� (��� ������ �� $M� � ����� � �� � ������ �� ���� ������ �� ��� ��� ��� � & �� � ��� ���� � � � ��� � ��� ������

����� �� �� $ x ��� ���� ��� �� ��� � � � ����� ����� �� ��� ��� � �� ������� �������� �� � � ���� ��������� � ���,�� �� ��� � � �� '������ ��� ���������� $ 3 �� �� � �� ��� �� ��� ���� � � � � ��� ���� � ì¶À ����� ������ �� ���������� ������� � ì¶À �� � � |��������} G ���� �� x����� E!H#I � � � �� �� (������������� � �� � �� ���� 2 � �������� � � � �� �������� $ M �& �� � �� ��� �� ���� � �) ��� � � ���� (�������� í� � ��,� � � � �������� �� � ���� �� � � �� � ���������� ���� ��� ��� �� $

K� � � '��� � � ���� � ������ ����� �� � ����� �� ��� �� ��� ��� � À � � �� � � �� ��� ���������� � � �� ��� � � � � �+�� ������ � ����� � �;� ��� � ����,���� ��� ����������� �� � � � � �& ��� ������ �� $

Page 74: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� �� ���� �

��� �ýöù �ýû � õúõ� �

M� ������ E �� ���� ��� ��� ����� ������ �� �� ����� � � �� ���� �� � ��������� �� � �� �����& � $ ��� � ��� �� �� ��� ����� � �� � ���� ����� � � � ����� � � ���� ���� �� � ��& ��� ���������� ��� $ M� ������ 8 � ����� � ����� ������ �������;� � � ����� $ �� ������ � �� ��� 2 � � ���������� G�����'�� �� ������� �������I $ M � ����� ����� �� � '����� �� �� � ��� �� �� � � ���� ��������� �� � ���� � ��& ��� ���� ����� ��� � � ���� �� � ����� 2 ��� �� � $ % �� �������� ������� ���� ��������� �� ���� �� ���������� ��� �� � � � � �� �� ��� �� ������ $

M ��������� �� ��������;� �� ��í� �� �� � ����� � � � � ����� ���� � ���������� � ���)������ �������� �� �������� �� � � �� ��� ���� � ������ � ���� �� 6 E# 4

|Á �>´ �.ÄÄ ?@´ B.@´C.´ �D /1./ m> @ >/ DC-- >� / . X >��?´@AB.@´C.´ � ?@ /��X .0� m?� . DB>Y � B?@´ ��?@´m�./1 A ´ >>m B.@´C.´ �D m?� Ä >�� DB>Y B� /1.@ �.m >@ �D� �C/ /1 �� .B B m?� ?@ /1 � �@m ° }

������ ��� ������ ��� ������ |OR���   �� ��� 4 ��� y�W í�ãã �������� } !:# �� |������ ���� '��� ������� ����� '��� ����} 69# � ������� �� � ������� ��+������� $ M � ��� ����� �� �� ��� �� ������ � � ������ �� �� �� ��� �� ��� � ����� �� � ������'u�� '��� � ����� ������� ���������� �� �Z���� �� � �)�� �� ��� �N��� �� �� ������ ����� ����� �� ����� ���� � ������������� �� � � ����� $

M�� ��& ���� �������� � ������'u�� ����� ������ ���� ��� � ������ 4E$ ����� ��� � ��� �� ��� '������� �� ��� � �������8 $ ��������� ��� ��� �� � � � ����� 2 � � ��� �: $ ���� � ����� ��� ��� �� � � � � ���� 2 � � ��� � �� ���� ���� � ��������� �� ����� �� ��� ;����

G�� � � � � ��� �I �" $ � �� ��� �� � � G���������I ����� ���� � � � � ���� 2 � � ��� �! $ ������� ��� ��� � �� � � �� ���� GQ � I $

P� � ���� � � ������ ����� �� ������ � ���� � � � ����� � � � �� �� ����� ���� �� '���� ��� ��� � ��� ����� � � � ���� (��� ��& ���� ��� ��� ���� ��� � '��� � ����� � '�� � �� � ����� � ��& ��� $ J��� � ���� ���{��� ����� G����� ��� ��+ ������� ����� �� � ���� ������� �I � � � ��� ��� �� � ��� ����G�� � � ��� ��� �� '������������I �� � � �� ������� �� � ���� ���� G��������� � ����� �����I $

M �������� � � �� �����'� ����� ������ �������� � ���� �� �������� 4 �� � ��� �� �w �����)������)� «

5 ������� �� ��������;� � � ��� �� ������� � ��� ��� � � ����� ����� �� �� ������ ��� ��� �� ���� �+�)� �� �� � ��� � ����� ������ ���� 2 � � �� $

5 �������� ��� � ��� ������ � ����� ����� ��� �����'�� ��� � �� ���� ����� �� � � ��� ����� ���� D /C�D G�� ���I � � ���� ���� (��� ��������� ��� ��� �� ��� �

6!

Page 75: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

66 [\ ] ^_ `a b = d _f `b a h^�a ]� _j_ `�

5 ������� � ����� ������� � �� ���������� � ������'� 4 J3 M GJ����'� 3 ��������� M �� ��I $ 3 � �������������� �� ��� � � � (��� �������� ��� ��� �� ��� $

ÿ� �������� �� � � �� ��� �� ����� ���� � � � � ������'u�� �� �P L M Gÿ�� ����� �� � �� ��L M I �� ������� � $ ÿ� � ���������� ��� ��� 2 � �� � ������ ����� � �� ÿ�� ����� �� � 2 ������ � ��������;�� �� �� ���� ���� ���� � �ÿ�� ����� �� � $

M� �� ��� �� � � ���� ��� ��� � ��� ÿ�� ����� �� � ��� �� �������� �� � � � ��� 2 ����� ����� />- B���B � � � � ��� ����� � �� ������� 2 � ����� �� �� ��� $ ÿ� ����� ��� � ���,����� 2 �� ����� 2 �������� ���� ÿ�� ����� �� � � � � � '��� $ 3 �� ��������� �� ���� ������ � ������ ��� ���� ������6 $ �� ����� ��� �� � � 2 ���� ��� �� �� � <��)L � *� �� �� � ��)� (� � $

ÿ� � ���������� ��� ��� 2 � �������� �������� � �ÿ�� ����� �� � �� �� ����� ��� �� <� $ K� � �� �� �������� � �� �� ������� � �� � �� � �� ��� � ª����õ � � � � '������ � �������� �������� ����� <� �� ÿ�� ����� �� �2 ������ �� � � � �;�� ��� �� ���� ���' $ � ª����õ ��,��� � Ã! ��� ��� � ��� ����� � ���������� ��� ������� ��� �����'�� ,� �� �� � ��� �� � �ÿ�� ����� �� � ���� <� $ K� � ��� �� � ������� �� <� ����ÿ�� ����� �� � �� � � �� � � ����� � �� ��� �� $ M ��� �������� ��� ��� � � ��� �����'�� �� �� ���� �� � �� �� � ����� G�� � � � � <� �� ¶OÀ ¶Ã� �� � � � ÿ�� ����� �� �I �� ������ �� ������� ����� � ��� ��������;� � ��� �¨�Ç� $ � ª�� ��õ �������� �� ��� ��� ����� ���� ����� ��������� �� ����,� �� ���������� � ��� �� � � ����� $ S ��� � � � � Ã! ���� �� ����������� �� �� �� � � ��;��� ��� �� � � ª����õ �+�� ������������ �� ��� �� � $ �� ����� ��� �� ��,� �� �� ����� �� Q�������   ����$ O�� ��������� ��������������� ������ 6 $

��� �� � � ���� �� �� � ������ �� � � ��� ������ �� � �� ��� � ����� ���� �� � �������� �������� ����� �P L M�� � � ���� ������ � �� �� ������ ���� � ������� ��� � $

» mn "r tl�½ # pq $l lk nmkl½¿r pl r%lp �M � ��� ����� ��� � ������ � � L M � � �� ��� � ��� � � � � ��� ����� �� � �� ��� � ���� ���

��& ���� ��������� ��� ���� � ����� �� �� � ������� � �� ���� $ M�� �����;� �� �� ������� � �� �������� �� � �� 2 � ��������� ��� ������ '���������� �� � ������ � ��� �� Q � $ M ������� � �������� ��� �� � �� ��� ��� ����;� � �� ��� �� � ����� 2 �����'�� ��� ������ ��+ ���� � ��� � � � � �������� � ����� �� ��� �� � � L M � ��� � ���� �� �� ��� �� � � O��� � $ M ������� ��� � � ����� ������� ��� �� �� �� ����,���� �� ��� �� ��� ����� ��� ��� ���� ��� � ��;�� �� y������ O � E::# $

J ���� K� ��� ������� � ��� �������ÿ� � �� ��� ��,��� � ��� � �� Â�� � ����� 4 ��¬�¦� «¡¡

ËÔÎÍ ÏÔ ÑÌÌ ( ÙÓÔ ä ' ËÔÎÍ ÏÔ äÎ ( ÙÓÔ G ' ÏØäÎ / $ 0 Ë ' ) ' ÑÖÌäÔ Ï ' )M ,� �� : $E � ����� � ��� � �� � �� ���� �� L M � O��� � � � � �������� �� ����� ��� � � $% � ������ � � '��������� � � ������ ���� ��� � �� Â�� ���� '� ���� �� �� �� � � � �� � ������

�� �� $ 3 �� � ,� �� : $E� � �� �� � �� � ����� � � � ���� �� � $ O� �� � (� � ������ � � ;�� 2 � ��� � ����à � �� ���� ���� ���� �� �� �� � � � ���� ��� � �� ������� $

J ���� & � � �� �� �� �� �L�����M ��� �� 2 � � �� � 2 ����� �� L M ���� ����� �� ����� �� �� � �� ����� � $ K� ���� ��� ��� �� �

�� ��L M � ���� � �� ����� � ��� �� ����� � � �)� (� � � � � '����� �� � ����� � � ��� �� G���� 8 $: $8I $K� � ÿ�� ����� �� � �� � �� �������� �� �� �� ����� � ���' � �� �� �������� � ��� �� �� � � � � ������� �� � ������ ��� ��� �� � ���� G2 ����� �� ���� � I $ K� � �� �� ����� � �� � ��)� ��� � �ÿ�� ������� � � ��������;�� �� � ��)� ��� ���� (��� ����� � ��� � ��������� � � � � � ���� ��� ��� ��� '�������L M �� ������ ���� �� ���)� ��� $

Page 76: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

= d® d k] jb 'a ( [ h)b b ` _f `baº] [b ] kb [ [ 6F

valeur ML

3.14

"abd"

10

34

valeur C

poignée

valeur ML

poignée

¸ ¹º » : $E 5 U ������������� �� � � (� � ������ � �� L M

* * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * *

+ + + + + + + + + + + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + +

, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,, , , , , , , , , , , ,

- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - -

return Val_long( Long_val(x) +

Long_val(y) +

Long_val(z));

}

external f : int -> int -> int -> int

let r = f 2 6 9;;

= "f_c"

partie Objective Camlpartie C

value f_c (value x, value y, value z) {lien

appel

retour

zone allocation dynamique zone allocation dynamique avec GC

¸ ¹º » : $8 5 ��� � ������� ����� ÿ�� ����� �� � �� �

M ,� �� : $8 � ����� � ��� �� 2 � '������ Â�� �� � �� � ������ � � ÿ�� ����� �� � $ M� ���� ��� �+�� ��� �� �������� ¶OÀ¶Ã� �� ������ ����� 2 �� � �� ���� �� � ������'� ������� �� '������ � .>��?´@.C@0/?>@ @/��X .0� G.. I $ M '������ � ��� � � � ��� ÿ�� ����� �� � �� � � � '������  �� ��� ���À yd��À yd��À yd��À $ y� ��� ��� ��� �� ÿ�� ����� �� � ���� � �� �� � �� � � � ��� � Ç��³ ¶ G�� ��� � 2 � ������������� ��'��� �I $ M� � � �� � �������� �� �������� �� ��À � ��� ��� ;���� O � µ �� � G� �����ì�Ç��I $ % �� '��� �� � � �+�� � �� � � � ��� � �� ���� � ��� ��� �������� �� ��� � ÿ�� ����� �� �G� �� /������ìI $ 3 �� �� ���� ��� ��� ��� �� �� �� ���� � � �� �� � ������� � �� ���� ��� � � �� ���w ��� ��� �� ������� � �ÿ�� ����� �� � ���� � ���� ��� ��� �� �� � ������ $ O� � � ���� �� �� � �� ��� ������������ � �� � ��� ��� ��� ;���� ����� ��� � ��������� �� ����� � Q � � � � �� ��� �� � � � $ J� ����� �� � (� � � � � ��� ��� ����� �� � ��� �� �� ÿ�� ����� �� � $

÷ûï2òû2ïö ø 52ñ ö3úò2ûôÿ õö ûòý øö�ý òûöû þ ÿ� ������ �� � � ��� ��� �������� � ������ � � � � ��� ���� � � ��,��� �� '������ � ���� � 4

��¦¦ ©­ £ÖÐÔ ËÍ ÏÏ - Ñ - * & ''ÖÐÔ ä Ñ � ÙÓ ËÍ ÏÏ ä ''

M���� � � ��� ������ � �������� �� ����� � � � ��� ������ � �z � �� �� ����� � �� � ��)� ��� ����� �� � ,�����ÌÏäÚ ÖÏ ×Ì ËÍ ÏÏ ËÍ ÏÏ ÊÚ Ö

Page 77: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

67 [\ ] ^_ `a b = d _f `b a h^�a ]� _j_ `���� ���� � ������� �� ��� � �� ���� ��;�� � �� � � ����� 2 � ,� �� : $: $ M ��������� ��� ��'��� ����� ����� 2 � ���� ���� � ������ � � ���� �������� $ K�� � ����� � �� � � � ���� � ���� ��� ���� ���� G� � ��� W���� ��� � ��� � � � ��� ����� � ��� ��������� $ $ $I ���� � � � ���� ��� ���� ������ G� � ��� W� ��� '������� � �������� �� �� ������ � �I $

U x y L 4 ��� �� � �C@/?Ä � G�� �� � ���� �� ������I�ÿ3 * 4 ����� ����� � ������ � �3 MKy 4 ��� ��� � �;� � ��������;� �� ���� �� ��3 MM O 4 ��������;� �� ���� �� �� �������� ��� �� ������ � �KU JL 4 ����� ��� ���� ������ �������� ��� �� ������ � �3PyP 4 ������� � ������ � �O0L S 4 ���� ��� ���� ����3 S % Q 4 ��'��� ����� �� m��C´yÿ� 4 ���� ��� � ��;��� ��� ��+������� �������

¸ ¹º » : $: 5 O�� � �� �� ������ �� ���� ��� � ��;��� �� � ���� ���� ÿ�� ����� �� �

òý��2ñðòôûðýñ÷ Ú óôïûðï øö � ûòý øö�ý òûöû þ K� ���� �� � �� ��� � ����� �� � ��� ���� �� '��� �� �� ÿ�)� ����� �� � ��� �� � 2 ������ � ������'� ������� G,� �� : $" I $

3 �� � � � �������� �� ����� � ���� �� ������� �� � 'u�� ��������� $ *� �+ �� � � � � (��� �� ���� �� � � �� '��� �� �� ÿ�� ����� �� � ���� ���� ��� ���W�� ��� � ,���� �� �� ����� �� �� �� ����� � ÿ�� ������� � �� � ������� y�³À�³À y��¨ $ ��� � � � �� �� ���� (��� ���� � �� �� � ��� � ��������� � � � ,����� � ��������� ��� � (� �� ��'��� ����� � � � ��� ���� ÿ�� ����� �� � ��� � '��� � ����� � � � ��� ����� � � $

« ©­ £ÖÐÔ Ñ - Ñ - * & ''�äÖÖ äÏW ÊÎÐÒÙËÔÐÎ 9ÑAÏäÚ Ö 9 Ñ ''

­ � ¢ ©¦!äÖÍÐ �äÎäÚ Ñ VäÖAÖÌÓÒ á�å '!äÖÍÐ ! Ñ ÏäÖÖ äÏW áâÏäÚ ÖAÓäÚ Ð�A!äÖÍÐ á9ÑAÏäÚ Ö 9å � �äÎäÚ å 'ÙÓÔ ËÍ ÏÏA� Ñ UÌÓÒA!äÖ á! å '

î ùôï èù 1îìæ2ìæ1îðø 1î ùôï è2 ñîõ 3î 4 3ï è õùù 1î ï ôëå ï ôëå 3ù ùôï è2ñîõ 3î 1 èùôï èñìå

¸ ¹º » : $" 5 P �� �� � � �� '��� �� �� ÿ�� ����� �� � �� � í ��������� �� � ������� )�³�À³À y��¨P,� �� ��� W�� �� ��'��� ����� ��� � ,���� � � �� � ������ ��� �������� �� � ���� � G,� �� : $!I $

y� ��'��� � �� ��� ��� ������� ������ ����� � �� � � ������� �� � ���� ������ ���� ��������� ��� �������� � � � $

� ©¡ ©¦ËÔäÔÙÏ ÙÓÔ ÏäÚ ÖAÏÌ�Ð /0 Ñ (�-������,$ � �-�����"5� � ÊÊÊ) 'ËÔäÔÙÏ ÏØäÎ ÏäÚ ÖA�äÔä /0 Ñ (&"� � &$5 � &## � &5� � ÊÊÊ) '�ÎÙÚ ÙÔÙ!Ð Í ÙÖÔÙÓ AÏ�ÎÙÚ /0 Ñ ( äÎÎäGAÒÐÔ � äÎÎäGAËÐÔAä��Î � ÊÊÊ ) 'ÏØäÎ â ÓäÚ ÐËAÌÑA Í ÙÖÔÙÓAÏ�ÎÙÚ /0 Ñ 9äÎÎäGAÒÐÔ 9 �9äÎÎäGAËÐÔAä��Î 9 � ÊÊÊ ) '!ÌÙ� ÏäÚ ÖAËÔäÎÔÍ� áÏØäÎââ äÎÒ! å( ÊÊÊ)

¸ ¹º » : $! 5 T����� � �������� �� y�³À�³À y��¨ � � ��� ��� � �� � �������

M��� �� � ���� ���� � ������ � � � � � ��� �� 2 � '������ ��� ��~À�ÃÀ³� �� � ,� �� : $! � ��� �� ����� ,���� �������� �� y�³À�³À y��¨ � � ��� �� � ��� ���� � '������ � ��� ���������� �� � � ���� ���� ����

Page 78: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

= d® d k] jb 'a ( [ h)b b ` _f `baº] [b ] kb [ [ 6H

�� ��� ���� � �� � �� � �� ������� �� �� ���� ������ $ M�� '��� �� ��� ���� ���� � � ���� 2 � ����������� ���� ���� ���� � �� ��� '������� ��� ������� ���� � �������� $

J ���J 6��������� � � ����� � ��� � ������ � ���� �� � ������ � �� �����'� ����� �� � ������ ���� ����� �� ��� �

����;� � �� ��� �� � �� � ������� � �� ���� G����� � ���� � ����� � ��� � ���� � Q � I �� � ������� G�� �� ��'������� � � ���� ��� �� � �� �� �� � �I $ ³ �� �� � � � � � ��� �� Ä CB/?A/1��.m?@´ � �� � � ��� �� ������� � ���;���� ���� ��������� � $ v � �� ������� �� � �N�� � � � ��� ������� � � � ����� ������� ���� �� ��� �� ����� $ 3 �� �� � ��� � � ������'u�� ��� ��� � � �� �� � ������ �� �� ���� $ O� �� ������� � ���;���� �� �����'� �� � � �� �� � (� � � ��)���� � �� ������� � ����� �� ���� � ������'��������� ��� �� �� � ������ �� � �� �� �� ����� ���� �� � � �� ���)� ��� $ M2 ��� � � ��� ��������� � ��������� ��� ���� ������ ������� ��� �� ������ $

ðñûöï[ôòö � ôñ2öõõöK� � ��� ����� �� ���� �� �������� � �� ����� � � ���� ������ � � ÿ�� ����� �� � �� ���� �� '������

� � � ����)� (� � �� ���� �� '��� �� �� �P L M $ M� '�� � ����� �� �� ��� �� � ������ �������� � �(��������� � ��� � ������� � �� ���� � � � ������ � � � �������� ��� �� Q � �� ÿ�� ����� �� � �� ��� ;�� ����� � ����� ������� �� � $

ô�öò � P ��;� ���� ��,�� � '������ ������ � �³ ~ � ÿ�� ����� �� � ���������� � '��� �� �� �� �³ ~ � � � � �� $7 ÖÐÔ � ÖÍ Ë - G Ñ - * G ''!äÖ � ÖÍ Ë � ÙÓÔ ×� ÙÓÔ ×� ÙÓÔ Ñ +ÑÍÓ�7 �äÖÖ äÏW ÊÎÐÒÙËÔÐÎ 9�ÖÍ Ë"AÌÏäÚ Ö 9 á� ÖÍ Ë " å ''× � ÍÓ ÙÔ Ñ áå

M '������ ��³ ~��� �� ���� � '��� �� �� ÿ�� ����� �� � ��³ ~ � $ J� ��� 2 ����� � � �� ��� ;��� ����� ��Ç �� � '��� �� ��  ������� (��� � � ��� 2 � ��������� ��� ����� � Q � � �ÿ�� ����� �� � �� ��� � ���������à �� Ä �� ��������� $ ��� ����� ������ ��� ����� �� � � �� ����à ¶À³Ã� $

7ÙÓ ÏÖÍ�Ð +ÏäÚ Ö�Ú Ö!äÖÍÐË ÊØ�7ÙÓ ÏÖÍ�Ð +ÏäÚ Ö�Ú ÐÚ ÌÎG ÊØ �7ÙÓ ÏÖÍ�Ð +ÏäÚ Ö�ÏäÖÖ äÏW ÊØ�!äÖÍÐ � ÖÍ Ë"A� á!äÖÍÐ ! å(

�@±U�äÎäÚ & á! å '�@±UÖÌÏäÖ & áÑ å 'Ñ Ñ â ÏäÚ ÖAÓäÚ Ð�A!äÖÍÐ á9� ÖÍ Ë"AÌÏäÚ Ö 9å '�@±UÎÐÔÍÎÓ ÏäÖÖ äÏW áÑ �! å ')*�,� ÿ�� ����� �� � ����� ¶OÀ¶Ã��� � '������ ��³ ~��� �� � ��� � �� ��³ ~� � � �� � ��� ���� $

7 Ð-ÔÐÎÓäÖ � ÖÍ Ë� � ÙÓÔ ×� ÙÓÔ Ñ 9� ÖÍ Ë"A� 9 ''Ð-ÔÐÎÓäÖ �ÖÍ Ë� � ÙÓÔ ×� ÙÓÔ Ñ 9� ÖÍ Ë"A� 97 �ÖÍ Ë� & ''× � ÙÓÔ Ñ $7 �äÖÖ äÏW ÊÎÐÒÙËÔÐÎ 9�ÖÍ Ë"AÌÏäÚ Ö 9 á� ÖÍ Ë ,å ''× � ÍÓ ÙÔ Ñ áå7 �ÖÍ Ë� & ''× � ÙÓÔ Ñ #

Page 79: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

F9 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�J� � �� �� �� ��� ��� ������ ����� ����� � �������� � � �� ���� ����� � �� ¶OÀ ¶Ã� �� �� � �����)

������� ��� � � �� '��� �� �� ÿ�� ����� �� � �� � '������ öì �~À¶Ã $ 3 �� �� ���� ��� � � �� � ���� � � ���������� ����� � � �� ���� ����� ��� �� � ��� � �� '�� 2 � �������� �� ���� $ P ���� � � ��� � � ��� � � ��� ���� � � �� ������ ���� �� � � � ���������� � ��� � ���� ���� $ *� ���� ���� � ���� � ��������� �� ��� ����� ������ ��� 5'��� �� �� �� ��� ��u�� � '��� �� �� �� �� � ���, �� ���� �� �� � ����� ��� ��� '������� � ������� � ��� $

ô�öò �9 3 �� �� ��� �� � �� ������� ���� � � (� � �C@/?Ä � � ������� � Q � � 2 � � ��;�� �� <�� �� $x * y � �� � �� �� � � ����� � � � � ������'� �� �� ���� �� �� �� ��� �� � ������� � �� ���� $ x � � ������������ 2 � ,� �� � ������ $

õôñ�ô�ö ø 5ðñûöï[ôòö ðñûú�ïú ô2 õôñ�ô�ö3 �� �� � � � � ��� ����� � ����� ���� �� ��� �� �� � ��� �� �� '������� � � �� ��������� �� ��L M

��� ������� �� ��������� �� ������� �� � � ����� � ������'� � ��� ��������� ��� ,����� �����'� � G �R I $K� � �� �� �� ����� �������� ¶OÀ¶Ã� ��� ����� � ��� $ * ��� � ��� �� � ������� �� �������� � G��� ����� ��� �� � ��� ������� ������� �� ��� � ���I ��� �� � � �� ����� ��� �� �� �� � ��� �� �� '������� L M� � � ��� � ��� ��� $ ��� �� �� � ��� �� ���� ��������� ������� �� �� ��� � � L M $

7Ð-ÔÐÎÓ 9ÙÓ ÏÖÍ�Ð +: 9ËGË�ÔÙÚ Ð ÊØ : 9� 9 ''7Ð-ÔÐÎÓ 9ÙÓ ÏÖÍ�Ð +: 9ËGË�ÎÐËÌÍÎÏÐ ÊØ : 9� 9 ''7Ð-ÔÐÎÓ 9ÔG�Ð�ÐÑ ÔÙÚ Ð! ÑËÔÎÍ ÏÔ ÔÙÚ Ð!äÖ (

ÖÌÓÒ Ô!AËÐÏ 'ÖÌÓÒ Ô!AÍ ËÐÏ ') ÏÔG�Ð & '9 ''7Ð-ÔÐÎÓ 9ÔG�Ð�ÐÑ ÎÍ ËäÒÐ Ñ

ËÔÎÍ ÏÔ ÎÍ ËäÒÐ (ËÔÎÍ ÏÔ ÔÙÚ Ð!äÖ ÎÍ AÍÔÙÚ Ð 'ËÔÎÍ ÏÔ ÔÙÚ Ð!äÖ ÎÍ AËÔÙÚ Ð 'ÊÊÊÙÓÔ ÎÍ AÓ Ù!ÏËÉ ') ÏÔG�Ð" '9 ''

7Ð-ÔÐÎÓ 9ÔG�Ð ;· ÑËÔÎÍ ÏÔ ÎÍ ËäÒÐ âÏÔG�Ð$ '9 ''

7Ð-ÔÐÎÓ 9ÖÐÔAÚ äÏÎÌ ;· �@=�A��UÓ ÑÙÓÔ ;· �@=�A��UÓ '9 ''

7Ð-ÔÐÎÓ 9ÖÐÔ ÒÐÔÎÍ ËäÒÐ ÑÙÓÔ ÒÐÔÎÍ ËäÒÐ áÙÓÔ ÉØÌ �

ËÔÎÍ ÏÔ ÎÍ ËäÒÐ â ÙÎÍ ËäÒÐå '9 ''

ÖÐÔ �ÎÙÓÔAÔÙÚ Ð!äÖ Ô Ñ�ÎÙÓÔAËÔÎÙÓÒ 9(Ô!AËÐÏÑ 9 'áäÏÏÐËËAËÔÎÍ ÏÔAÔÙÚ Ð!äÖAÔ!AËÐÏ Ô å '�ÎÙÓÔAËÔÎÙÓÒ 9 'Ô!AÍ ËÐÏÑ 9 '�ÎÙÓÔAÙÓÔáäÏÏÐËËAËÔÎÍ ÏÔAÔÙÚ Ð!äÖAÔ!AÍ ËÐÏ Ô å '�ÎÙÓÔAËÔÎÙÓÒ 9) 9 ''ÖÐÔ Î Ñ ÏÎÐäÔÐAËÔäÎAËÔÎÍ ÏÔAÎÍ ËäÒÐ áå ''ÖÐÔ Ù Ñ ÒÐÔÎÍ ËäÒÐ ;· �@=�A��UÓ Î ''�ÎÙÓÔAÔÙÚ Ð!äÖáäÏÏÐËËAËÔÎÍ ÏÔAÎÍ ËäÒÐAÎÍ AÍÔÙÚ ÐáäÏÏÐËËAËÔäÎAËÔÎÍ ÏÔAÎÍ ËäÒÐ Î åå ''ÊÊÊ

ÖÐÔ Ù� Ñ ÒÐÔÎÍ ËäÒÐ ;· �@=�A��UÓ Î ''�ÎÙÓÔAÔÙÚ Ð!äÖáäÏÏÐËËAËÔÎÍ ÏÔAÎÍ ËäÒÐAÎÍ AÍÔÙÚ ÐáäÏÏÐËËAËÔäÎAËÔÎÍ ÏÔAÎÍ ËäÒÐ Î åå ''

¸ ¹º » : $6 5 J����'� �� ������ � � ��L M3 �� � ,� �� : $6 � � �������� À �� ¶Ç �� ��� �� ��� � ������ ~Àó �À�À �� ¶Ç�� � �� '������ �� ������

�à ¶�À¶�~Àó �À�À �� ¶Ç �� �� ��� � ³� �À yd ~Àó �À�À �� ¶Ç �� �� � ��� � � � ��� '������� � �;� �� ��� � ��,���� � � � �� � �� � �� � ��� � �� 4

äÏÏÐËËAËÔÎÍ ÏÔAÔÙÚ Ð!äÖAÔ!AËÐÏ � áËÔÎÍ ÏÔAÔÙÚ Ð!äÖ ×� ÙÓÔ åÚ Ì�ÙÑGAËÔÎÍ ÏÔAÔÙÚ Ð!äÖAÔ!AËÐÏ � áËÔÎÍ ÏÔAÔÙÚ Ð!äÖ ×� ÙÓÔ ×� ÍÓ ÙÔ å

y� ��� �� '������� ���� � ���� ������ � � �� ���� ����� � �;� 2 � � ����� � � 2 � ���� $ M�������'�� � � � ��� � ��� �� ��� ������� ���������� �� ������ �� ��� �� �� ��� � � ���� �� �� ����������� L M ��� ���� �� �� ��� � L M ������ ����� $ ��� � � ��� ��� �� � ������ ����� ������ ���'������� � �� L M � �� ��� � ����� �� � ������ �� ��������� ��� �� '������ � �� ����� �� ���� �����'� $

Page 80: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 dc d ` h^jb kb j b i�] a ; '� F E

õôñ�ô�ö øö øö÷òïðóûðýñ ø 5ðñûöï[ôòö ô2ûýñý� öM � ��������� �� ������ �� ��,������� � ������'� G Ã! I � ��� �� �� ������ ��� ����� ��� ��� '������� �

��� �� ��� � � ���� ��� � � ������ �� ����� ����� �� � � �� ��� �� ������ $ M� '�� � � � ��� ����� ��������� ����� � � � ����� �� ������ � ���� � ��� �� � ����� ���� �� ������������ �� � �� �������� �� ���� �� �� � ����� �� ������ � ���� �� � ����������� � ����� � ������'� $ x ��� ���� ������� � � Ã! ��� ��� �� �� � �� ���� � � � � ����� �� ��,� � � ������'u�� � � � ����� � � � � � ����� ��� �� � ����� ���� 2 ������� ��������� �� �� ������ � ���� $ K� ���� ��� � � Ã! �� �ÿU S P E:7# ��,���� � �ÿL Q� ��� ����� ��������� �� � �� ��,���� �� �ÿU S P $ ��� Ã! ���� ������� � � � �ãã $ O������ ���� ����� � � �� � �� <� G����� �� ���� � ���� ���I $ O� ���� ��� ���� ����� ��� � � � ��� � ������� �������� �������� ��� � ���������� �� � � � � � 3 �* E69# �� � �<- �@ =�>C-° $ M ������;� � ����� '� ����� � Ã! ��� �������� � � � � ������'u�� ��� �� � ����� �ÿL �� L �����'�± $

M�� �����'�� �������� ��� ������ '���������� ���� ������ �� ����� �� �� ���� �� � �� �ãã !:# � 69# 2 ��� Ã! � � � �����'�� ��� �� � ����� �ÿL G  í3 ���� 6 E# �� �� � Ã!² I $ y� ��� �� �����'��������� ����� � ���������� ��� ��+ ������ ������������ �� � �� ���� � � ���������� �� �� /1��.mD �� �� � �� ������ ����� �� � $

��� ������ �� ��,������� � ������'� ���� �� �;��� ������� �� ������ ��� � ���� �� ���� �������� �������� ��� '������������ $ x � � ���������� 2 � ������ : $: � Ã! ��� ��� �� ���� ���� ���� � � � �����'��ÿ�� ����� �� � �� <� �?. �� �� � ��;��� ��� ��� ���� ���'� $

» ml >q¼ tl%l t lsor½?�@J� � ���� �� ��� � � � ������� �� � ����� � �� �� ��� ��� ���� � ���� �� ��� '��� ���� �� ������ � ��

��� � � � � ��� ����� � � �� � �� ��� �� �������� $ ÿ� ���� ���� �� ������ �� |�� }� �� |� ���}� ��|������} � �� ������ ����� �� $

��� ��� ���� ��;��� ��� ���� � � � � ��� ��������� �� � ��������� � �� ��� � � � � ���������� ��� � ������� � $ ÿ� � � � ���� � ����� ������ �� ������ �� ����� �� � � �� � � � %��� � M��� � � � h� � �~�� Þ ��� � v �� � S �� ��� *��� � � ������ � � � ��� ��� x�� � ��� ����� �� K�� � � ��� � ��� ����� � �M Å � v OM z � � � ��� � � � ����� � �� $ 3 �� � � ���� � � ���� �� ������ � � � �)� (� � � � ��������� ������� �� �� 2 ��� �� � �� ���� ��� � � � � ����� ���� � � �� ��� (�� O®M $ ��� ������ ���� �� � '����� � ��������� � � � ��� ���� �� � ��������;� � �� � ��������� �� � �� ��� ;� 2 � ����������� ��� �� ����)� $J�� ���� �� �� � �� ���� ����������� $ M ����������� � ����� � ��� �� �������� ��� ��� � '������� ������)� �� � �� ���� �� � ��� �� ��� ��� �� �� ��� '��� � 2 �� � �� � ��������� $ M ���;�� �� �������� ��� ��� �� ���� 2 � � ����� �� � ���� $ *� � �� � ;� � �� ������ ��� ������ 2 ������� �� ��� � ������ �� ����� ���� �� �� ������ '������������ $ J� �� ��� �� � (� � ��� ������ � �� ����� �� � �)� � � � �� ���� � ����������� '����� ��� $ ÿ� �������� ���� ��� ��& ���� ����� 2 ��� ��� ���� �� �� ������� � �� ��������� ������� �� 2 �� ��;���� �& ���� � �� �� ����� 2 � �������������� $ K� ���� ��� �������� � � ��À¶O�RÀ� �� ���� �� � ��� ������� ��� ��� � ���� ������ �� ��� �� ������� ����� �� �� ��& ����� � � ��� ��� ��� �� � ���� �� � ������ $ ������� �� �� ������ ���� �� ����� ���� � � ��)���� $ ��� �)�� � � (��� ��� ��� ���������� �� �� � ���� ���� ���� ����� �� GM � v OM I $ M ������(� ��� ���� � ���� ��& ��� 2 � ���� ���� $

M� � ����� � � ������ �� ��� � � � ����� ��� ��� �� �� �� � �� � � � �� � ���������� G/>- B���B � A �.mAB �.BAÁ �?@ / !>>- I $ M ����� ��� �� � � � (��� ��������� � ��� � � ����� ��� ���� ��� � ��� ��� ������� � �� ����� & ��� ������� � ����� ������ � � �� ������ ��� � '��� � ����� �� $ ��� � � � ���� ���� � � ��

ªÉÉÉ ÊÌÚÒ ÊÌÎÒ�ÈÉÉÉ ÊÌ�ÐÓÒÎÌÍ� ÊÌÎÒÕÉÉÉ ÊÚ ÙÏÎÌËÌÑÔ ÊÏÌÚÛ ÏäÚ Ö ÊÙÓÎÙä ÊÑÎ�ÏäÚ Ö<TUÜÉÉÉ ÊÖÍä ÊÌÎÒ�ÉÉÉ Ê!ÙÎÔÌÌÖË ÊÏÌÚ�ÉÉÉ ÊÖäÔÐ-�ØÔÚ Ö ÊÌÎÒ�

Page 81: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

F8 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `������ � � � ������ �� �� ���� � � ����)� ���� (��� �������� �� � ��� ���� ��� � ��������� $ M �� ��� ����� � ����� G��� ��� � � ��� � ���� �� �� ��� � ��� � ����� �� ���I ��¯ � � � � �������� �� ����������� �� $ 3 �� �� � �� � �� �� ���� �� ��� � �� ����� ��� G����� � � ���� �� �I � ��� ��¯ ��� ���� ����������� ��� �� �������� $ *�,� � ������� ���;�� ��� �� � �� ���;���� �� � ������ �� ��� $

J� � ���� �� � ������� �� ����� ��� � ��(��� ��� ������ '���������� �� � � ����� �� � ��� ������ ��������� ���� ��� �� �� � � *� � �� Q�� � $ M �������� �� � � � �� A �.mAB �.BAÁ �?@ / � ���� ������� ���� �������;��� M��� $ 3 � �� � � ����� � � �� ���� ������ � � � ���� � ����������� �� ����������� $L (� � � ����� �� � � � ������ � ��� ������� �� � ����� ���� ³� �À ��� $ M �� � <� ���� ���� ������ �� �� � ���� ���� ���� � ��� � � � � ����� � �� ����� ��� ���� �� � ��� ����� $ L �� ��� �� � � � ����� ����� � ���� ��� ��� ������ � �� <� �� �� $ U ��� � ��� � (�� � ������ �� � �������;��<� �� � � |���� � <�}Å �� � (� � � �� ����� � <� �� � � |� ����}zC ������� ���� � ���� ���� 2� ����� �� ������ <� $ M ���� ������ � ����� O��zz 8:# � ����� ��� � ����� ������ �� ����� ��� ���� �� ���� � ����� ����� �� ��� ��� � $ M ����)'��� � $x *y z� � � � �� �� � � �� ��� �w � ����;����� ��+ ������������ � � ���;�� ��� ��� Á A �D �0/?>@ ��� � ������� � � � ��������� �� ����� ���� �� �� ��� � ���)� ��� $

M ��� � ����� � � � � ���� ������� �� ������ ��� �� �������� �������� ��� ��� ����� ���� ���� � �������� $ ÿ� ��� ���� ���� ��� ������� ��� �� � ���������� ��� � �� ��� ���� � ���� �� �� �� ��������& � ��� ������ �� ������ � ���� $ K� �� �� ���� �� �� ������ � ����� ������� ��� �� � �������������� �� « x � � �� � ����������� 2 � � ��������� � ����� ÿ�� ����� �� � ��� � ��� $

J �� �� E �� �� ������ � � � FGH IJKJIS��� � � �� ��������;� � ÿ�� ����� �� � � ���� (��� ������� ��� � ������ � � � �� � ���� �� � ����� ��

� �� ����� �� �� />- B���B$

� ôñðó2 õôûðýñ ø2 LMN OPQPO óôï 2ñ óïý�ïô�� ö þÿ � öòûð�ö �ô� õ ��� � � �� />- B���B ÿ�� ����� �� ���� ����;��� ��� ���� �� ÿ�� ����� �� � � �� ��� � ����� �� �� � ��� ���� ���� � (� � � � � ������ � � ÿ�� ������� � �� �� ���� �� � ��������;� � À ���¶Ç ¶�� �� ��� � $ ��� � ��� �� ���� � ���� �� � � �� ��� 2 � ���� ������ �� ������ � � ÿ�� ����� �� � � �)� (� � $ J� ��� ���� � ����� �� �� ��,��� �� '������ ¶Ç �� G,� �� : $FI� � � ��� �� ��� ������ ÿ�� ����� �� � G����������� � ���������I $

­ �¢ à�¡à ©­ £?Ì� ÖÌÌ� ÊÙÓ ÙÔÙäÖÙXÐAÔÌ� ÖÐ!ÐÖAÐÓ! áå ''ÖÐÔ Ð!äÖ Ô-Ô Ñ ÖÐÔ Ö Ñ áUÐ-ÙÓÒ ÊÑÎÌÚ AËÔÎÙÓÒ Ô-Ô å ÙÓ

ÖÐÔ �ØÎ Ñ á?Ì� ÖÌÌ� Ê�äÎËÐAÔÌ� ÖÐ!ÐÖA�ØÎäËÐ Ö ÙÓ?Ì� ÖÌÌ� ÊÐ-ÐÏÍÔÐA�ØÎäËÐ ÔÎÍÐ ÓÌÎÚ äÔ ÊËÔ�AÑÌÎÚ äÔÔÐÎ �ØÎ ''Ð!äÖ 9ÖÐÔ ä�� & - Ñ - * & ''9 ''Ð!äÖ 9ä�� & � ''9 ''

¦§�¬7�­ �¢� ¤�¢� £� RST UVWVU7 7Í ËÐ 9Ú äÓ Ù�ÔÌ� ÊÚ Ö 9 ''× � ÍÓ ÙÔ Ñ áå!äÖ Ð!äÖ � ËÔÎÙÓÒ ×� ÌÌÖ Ñ +ÑÍÓ �!äÖ ä�� & � ÙÓÔ ×� ÙÓÔ Ñ +ÑÍÓ �× � ÌÌÖ Ñ ÔÎÍÐ× � ÙÓÔ Ñ "× � ÌÌÖ Ñ ÔÎÍÐ

�¤ � ¡¢ ¤� £ �¢�ÌÏäÚ ÖÏ ×ÏÍ ËÔÌÚ ÔÌ� ÖÐ!ÐÖÖÙ ÊÏÚ ä Ú äÓ Ù�ÔÌ� ÊÚ Ö ×Ì Ú äÓ Ù�

�6�¦�� ¡¢� Ê�Ú äÓ Ù�!äÖ ä�� & � ÙÓÔ ×� ÙÓÔ Ñ +ÑÍÓ �× � ÙÓÔ Ñ "

¸ ¹º » : $F 5 M� />- B���B � ��� �� ��� �� � ������ � � ÿ�� ����� �� �

ÎWÌäÖä ÊÙÖÌÒ ÊÑÎ���ä!ä�XÉÉÉ Ê�äÓ ÙÓ Ì ÊÓÐÔ��ÉÉÉ ÊËÏÌÖ×ÔÐÏØÓ ÌÖÌÒÙÐË ÊÌÎÒ�ªÉÉÉ ÊÚ ÙÏÎÌËÌÑÔ ÊÏÌÚ �ÓÐÔ

Page 82: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 dc d ` h^jb kb j b i�] a ; '� F:

ð�ó ý÷÷ðÿ ðõðûú øö � ôñðó2 õöï õö LMN OPQPO öñ � J� � ���� �� � ��� �� ��� ��� �� � ����� �� �� � ��� ���� ���� ��� �� ������ � � � �� ��À �� �� � �� � $ M��� �� ��� ������������ G'������ ˵�À���¶ ��� �À�À ���¶Ç ¶�I�� />- B���B ÿ�� ����� �� � ���� �� �������� � ����������� ��� � �� ����� � G���� �� ÿ�� ����� �� �I �� ������ ��� ���� ������ �� � ���� ��� ���� ���� $ 3 � '�� � �� � � � ���� ��� ���� ���� � ���� �� ���� ������ 2� ���� ���� G,� �� : $!I � �� �� �������� � ��� ���� �� />- B���B ÿ�� ����� �� � �� � ��� �� 2 �� �������� $*� � ��� � �� ��� ���� ������ ���� ���� ������� ��� � ����������� ��� �� � � ���� ���� ���� � ����� �� �� ���� ����� �� � � �� ����� � � ������ ������ ������ � �� ������� �� '��� �� �� ���� 2 � � �� � �� ��� ������� ����� �� � ��������;� � ������ $

J �� �� ��}����� � Ç��� � �� ����ÉYZ�� FGH IJKJIM� � � ��� �� ������ ���� ������ �� />- B���B �� � '��� � � � �� ��������;� � �� � $ 3 �� '������� � ��� ��

��� ���� ���� ��� ���� ����� � � � � ��� ����� �� �� � ��� �� �� � � � �� � ���������� � � � � ���� �� �����Z� ��� �� � (� � ��� ��� � � � �� ������ � � � �� ���� $ M � ��������� ��� ������� � />- B���B ����� ��� ������ �� ��� ��������� � ��������� �� ������� ���� ������� ���� ����� ��� $ 3 � � '������� ������������� '� ����� 4

5 �� �� ������� �� À �� �¶Ç ¶���� �À GE �� �� '���I �5 �� ��� �� À ���¶Ç ¶��¶O¶� G2 �� � ��� ���� � � �� �����I �

�� � �������� �� ����� � ��+ �� �� �� � ����� �� � '��� � � ����� 4ì �� y� ��� �¶O¶�³À ���¶  ��R �¶Ã ~�� y�À�� �¶Ç¶�

ô� ý2û øö õô ûôÿõö øö÷ ÷D�ÿ ýõö÷ K� � �� � �� � ���� ��� � � � �� ��� �� ���W�� � ���� ��� ���� ������� �� ,���� �������� �� y�³À�³À y��¨ �� � � ��� ��� �� ����� ����� ��� ��'��� ����� �� ���� ������ ���� ���� ��� ���� ���� �� � � ���� ���� ���� G�� � I �� ����� � G�� ÿ�� ����� �� �I $ K� � ������� ��������� � ,���� ������ �� y�³À�³À y��¨ � � ���� ��� ���� ���� ���� (��� ����� ��� � '��� � � $ ÿ� ������ ���� �� � �� �� ��à ~R�� � � � ����� � ���� ��� ���� ���� ��� � ���� � � �������� $

ô� ý2û øö÷ óïð� ðû ð�ö÷ M�� ���� ������ ���� �� '�� ��� '������� � � � ��� � ���� ����� � �(��� �� �������� � ��� ÿ�� ����� �� � $ * ���� '��� ����� � � ���� � ���� �ó� z° G,� �� : $7 GII $ P,� �� � � ���� (������ ���� �� � ��������;�� G,� �� : $7 G� II � ����� � ���,���� � � � ������ ��� �� ��� � � � (��� ��� �� 2 � '����� � � ���� ���� ���� �� � � �� ���������� G,� �� : $7 GII

3 �� ����� � � �� ' � � � � ���� ��� ���� ���� ���� ����� �� � � �� � � � (��� ��� �� G'������� ��� ���������� � />- B���BI $ ÿ� ��� ��� �� ���� ����� � � � ������� � ����'��� $ *� � ��� � �� � � ������ ��� ���� ������ ��� ��� �� � ���� �� �� �À�À �� �¶Ç ¶� G,� �� : $7 G� II � ���� ���� � ��� �� � (� � ��� � ������'��� $

% �� ���� ����� ��� ��� � � ��� � ì¶À�~µ�À���¶ � �������� �� �{�� �� ��;��� ÿ�� ����� �� � $����� �{�� ��� �� '�� � ����������� �� � ���� ��� ���� ���� ����� � ��� �� ,���� �������� ��ßy�³À�³À y��¨ ß� ���� ����� ��� ���� �� � ��� ���������� � �C@ /?Ä �$ K� � � � �� ������ � � ÿ�� ����� �� �;�� 2 ���� ���� ����� � �� �����'� ��� ������ � �� ������ �� � ��� �� �� ���� ����� G,� �� : $7 G�II $

J� � & � ���� ������ � � ÿ�� ����� �� � � ��� ���� � '������ �� � ������'� � � � �� � ���� ���� �{�� $P,� �� �� � ���� � ����� ��� ���� ������ G,� �� : $7 G' II � �� � (� � ������ ��� ��� ������ $ J� ��� ���� � ����� ��� ��� �������� �� />- B���B �� �� ��� ��� ��'��� ����� ��������� $

ò4ôï�ö� öñû øDñô� ðE2ö ��� ����� � �� �� � & � �� � � � ������� �� � ����� ��� ���� �� � ��� ��/>- B���B ����� � $ *� �+ �� � �� �C@/?Ä� �� �����;�� �� �� � � � � />- B���B ÿ�� ����� �� � �� ��� ��� ��� $ 3 � � '�� � � ���� ��� ���� ������ � � ���� � ��� �� �������� �� 'u�� �� ��;��� ��� ����� � � �� � ���� ����� � ����� �� �� �� � ��� ��� ���� ������ � G� �� � ��������;� � ������ �I $ K� � �� � �� ' � ��� �������

�È �££�� à ��Þ�¢� ����  [�¬� ¤�¢� �¢� è è£ ¡�§�Ý�� ¤ß¢�­  Ý�� £ �� \ �¢� è è £ ¡�§�Ý�� çèé �¦� Þ� ê�­ £ ]ÔØÎÐä�Ë ÊÏÚ ä ^ÒÎä�Ø ÙÏË ÊÏÚ ä_ ©

Page 83: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

F" [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�

CODE

PRIMS

SYMB

...

get_symb

get_prims

exécutable table des primitives

du runtime

interprètre de bytecode

dont init_toplevel

appel de get_primsexécution du bytecode restant

(f)

(e)

(d)

(b) (c) exécution du bytecode

appel de get_symb

(a)

¸ ¹º » : $7 5 T��������� ��� �� � ��� �� �� ���� �����

� ��� ���������� �� ���� ���� �� ������� ��� '������� � �;� � �� � �� � ������� � ������� �� � ��������� ����� ��� ������� $

ðñûöï[ôòö P,� � �� � � ���� � ��� ��� � />- B���B ����� � �� 'u�� ��� ��� � �� �����'� ��� '� ���� $3 ��� ÿ�� ����� �� � � � ��� ���������� ����� �� ���� � ������ ��� �� � ���� � �� � � (� � 'u�� � �

� ���� ���� � ��� � $ J� ��� ��� �� ���� ��� � ����� �� �� ������� ��� ��� ��� �� ����� ��� ��í� ��� ,�����G�� ��� � �� �����I 2 ����� � � � ��,��� � ����������� ��� ������ � ���� ���� $

3 ��� � � � ��� � ������� � ����� � ��� � ��� ����� � �� ÿ�� ����� �� � � � ����������� ��� �� ������� ��� ���� �� ���� $ ��� � ��� �� �� ���� ���� � � ������� ��� /1��.mD� � � ���� '��� ����� � �������� � ��� ���)���� �� � � ��������;� � �� ������ �� ������� �� � � �� ���� �� ,� �� � ��� ����� ������� ���� ����� ����� �� � $

P,� � ��� ��� �� � ��� � � ������������� � : '������� � ���� ����� ���� ���� ����� 45 �R�à Á ~�R¶� ��À �� �¶Ç ¶��¶O¶� ��R�à Á ��ƶ� 4 ���� ��� � ������ ����� � � />- B���B G��� � ã ��� �I �5 Ç ��³ ¶ À�� �¶Ç¶��¶O¶� ��R�à Á ��ƶ� 4 ���� ��� � ��� � �� � ����������� ��� �� G� �� �������� ÿ�)

� ����� �� �I �5 /�` ½�Ý´ ��� �À���¶Ç¶��¶O¶ � ��R�à Á ��ƶ� 4 ���� �� � ����� �ÿL $

J �� �J KL�f � ��J� ��� � ������� � ����� �� �� � ��� ��� �� />- B���B ÿ�� ����� �� � �� � $ v��� � ���� ��� ��� ��� �� � �

�� � '�������� �� � />- B���B ����� � 4 ଡ7¬�­ ­ � ê a �6 ©¦ÔÌ� ÖÐ!ÐÖAÙÓ ÙÔ áäÎÒ! å 'ÔÌ� ÖÐ!ÐÖAÐ-ÐÏ á9ÖÐÔ ÎÐÏ ÑäÏ - Ñ Ú äÔÏØ - ÉÙÔØ � ×� & 8 & ×� & 8 - ×� -âÑäÏ á- ×&å ''9å '!äÖ Ñ ÔÌ� ÖÐ!ÐÖAÐ-ÐÏ á9ÑäÏ , ''9å 'ÎÐË Ñ &*UÌÓÒA!äÖ á!äÖå '�ÎÙÓÔÑ á9&*, áÑb�:Ó 9 � ÎÐËå 'M �� ������� � ����� ����� �� � ���� ���� ¶O �¶O¶ $ �¤ � ¡¢ ¤� £ �¢�

ÒÏÏ Ð- ÊÏ ×Ì Ð- ÊÐ-Ð ×ÖÔÌ� ÖÐ!ÐÖ*� � ���� ���� �� ¶O �¶O¶ & �� ���� �� ��� ��� ����� $ �6�¦�� ¡¢

&*, áÑ &� &3 �� ��������� ������� � />- B���B ����� � � �� ���� ���� � ���� ���� � ���������� ������ �� ���

� ������ � x�� � ���� ���������� ������ 6 $

Page 84: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 d8 d _)j ^ h 'a �] k] b ` h��b [ `_ kb [] i j F!

» m» cd e ¼ q�½ fr%r lk gop lpkn%l �r s t

<PvP F!# � ���;�� � � ����� � � ������'u�� �� � ��� � � <x J F"# G<� x ���� J����'�I $ ÿ�� ������� � �� � � �� � � ����� � � �) ��� �� �����'� ������� �� � $ ��� �� � ������ � � ���� ���� ����������� ��� �� � ��� �� ����� � � �?. � $ M �� ��� ��� �¨�Ç �z± HH# '� ���� ���� �����'� �� �� ���� ����� ��� �� � ������ $ x ��� ���� �� � � �� �� �����'� �� �� ���� ��� �¨�Ç � ��� ��& ��� �� ��� �Z�� ��� ���� � � ���� �� � � ��� ��� �� $ K� ����� �� ���;��� ��� 2 ��� � ����� �� �� � �� ������ ����� ��� �� �Q � $ ÿ� ����� ���� 2 � ��� ��� ��� ��� ��� � � � ����� �� � � ��� �� � ��;�� ��� ��� �� �Z�� $ ��� � � ���� � ����� ��� ��� � � �;��� ��� ��� � � ��+;���� � �� �������� � � ���� J3 M ������ ����� 2 � ��������������� �� � � � �;��� ��� ��� � � � ��� ���,�� ���� ��������� $ M ��������� ��� ��� � ��� ���� ÿ�� ������� � �� <� ������ �� ����� '��� � �ÿ�� ����� �� � �� ������ �� '��� � �� m>Y@ 0.D/ � � � � ����� <�� ��� ��� �� ÿ�� ����� �� � $

òý�óôïôð÷ýñ hô�ô � þÿ� öòûð�ö �ô� õ

ùôñôùæiñëöæëjìçö kôóô ÷ðø çùæëóç úôï è ùôñôùæiñëöæëjìçö kôóô ÷ðø çùæëóç úôï èùèôööçö √ √ öîìö1æl2ôõç √ √ôùùmö ùnôï2 ö

1 2niñëæôõç ≡ öîìö1æl2ôõç o îìë åîå

èëôëöîå æôñòëóç √ √ öìñùnôñõç √5èëôëöîå 2ñiùî ùç √

3niñëæôõç ïìèæë2 èç

6√

æl2ôõç öæôæëjìç √ √ ùèôööçö 2ôñôï iæñiçö7

√æl2ôõç òlåôï ëjìç √

42ôjìçæôõçöéïîòìèçö

8 8ùèôööçö ïìæìçèèçï çåæ ñiùìñöëóçö √9

% � √ ����� � � � �� ����� � �� ���� � ���� �� ������ � ���� � ���� 2 �� ������� � �� �� �� ������ � � ������ �)����� � $

E$ ����� � �� �� ��� ����� �� �� ����� ������ ��� ������� �� ����� � � �������� ���� ����� ��� �8 $ ��� �� ��� �?. � �� �� �� � ���� �� �: $ ��� � ���� ��� ����� �� ���� ��� '������� ������� � � � � � � �� �� ��� ������� �� ����� ��� ��������

������� �" $ �� �� m>[email protected]/ �� ÿ�� ����� �� � �� ��� ��� ��� � ���������� �)� � ::# �! $ �� �� � ����� �� ÿ�� ����� �� � � �� �� ��� � �� ~¶� � � � ��{��� ��� �� ��� � � � �� � ������

� � � � �� (��� ����,��� G>����?m?@´I ��� �� �� �)���� �6 $ �� � �������� � ���� �� � � � ��� ����� <� � �� ��� ��� � � � ��� �����'�� �F $ �� �� ����� ��� ������ �� <� � �� ��� ��� ��� ��� ���������� K�aa E!!# �� Q����� <� 86# �7 $ ��� � � � ��� ��� ���� � �ÿ�� ����� �� � ������ ������ � ������ � ���� �� ��� �� ����� <� � �

������ �� � �� ��� ��� ����� ��� ���� ������ �� <� �H $ �� �� ��� ������ � ��� � � � ��� �� ���� �� � � ����� ��� �� ���'� $

M ������������ ��� �� � � � �;��� ��� �� ������ ��� 2 � ����� ��� � �� �� ����� � ���� � ��� �� �� � ��������� �� � � �� �� ������ ������ $ M�� �������� � �������� �� �� �� �)����� ���� ��'��� �� $ 3 � ���� �� � ���� ��� �� � �� � �� �� �� � ����� � �� �� � �� ��� � �� � ������� �� � � � �� ���{��� ��� �� ��� � � � ��� ���� �� $ M �������� ��� ��� ��� �� �� � �� �� �� ����� ��� ������ $ � ���� �+������ ��� � � � �;�� ��� ����� ��� � � � � ����� � � �� �� � �� � ������ � � � � �� � ������ ����� ��� ����� <� �� ÿ�� ������� � $

�Õ ÏäÚ Ö ÊÙÓÎÙä ÊÑÎ�ÏäÚ Ö�ä!ä

Page 85: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

F6 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�J �J �� � ���������� �� � Ç6� Æ

��� J3 M ��� ������� � � � �����'�� <� � � � ÿ�� ����� �� � $ K� � �� �� � �������� '����� ��� �� � ������<� �� � � ��� � ��� ���������� �� ���� � ��� �� � �ÿ�� ����� �� � ���� <� � � � ����� � �� 0.B B�.0Ø ������� ����,������ � � �� � ���� �� <� �� �� � ���� �� ÿ�� ����� �� � �� � ��� ���� ������� �� ÿ�� ����� �� �� � �� �����'� <� $

î ïðñòðó ö÷x ���� � �������� �������� ���� � ��� ������ � ��� ���� � � �J3 M ��,�� � ����� � � ��� ��������� ��

���� � �� ���� ������� �� � ������'� G���� ,� �� : $HI ��� �� ����� � ����� �� ��� � $ ������)� �����)� ������ ���� ������ ��� 2 �� ���� � �� ���� ������� �� �� �����'� <� ��� �� ����� �� �W�� � ��2 �� ���� � �� ���� ������� ÿ�� ����� �� � ���� ��� � ��� �� <� ��� ��� �� � �������� � $M �������� � �� �� � �� <� 4 ��� ��� � � � ��� ����� � �� � ���� �� � � � ��� �����'�� $ 3 � ���� �� � � � ������ � � � � �� �� ��� �� ÿ�� ����� �� � ���� <� �� '�� ��� �� � �� �� �� � ���� �� � �� �� ����������� � ��+�� � ��� �� � �� �� 2 �� � ���� �� �?. � � ����� � �� 0.B B�.0Ø $ M�� ������� � �������� �� ���� <� ���� ����� ��� �� ��� � ������� ���������� ��� ��� �� ��� ��� �� ÿ�� ����� �� � $O� ��� ��� ��� �� ��� ��� �� �� ��� ���� ��� ������ G� ���� �����I �� ���� � ��� �� � ��� ���� �G��� �� � ���� I ��� ��� �� ���� ����� ���� �� ��'����� �� ��� ���� �� ����� $ ÿ� ������� � ��� � �J3 M�� ��� � �� ��� ~Àà ��ì � � � ��� �� �� ��� � ¨�Ç � ����ì �ËÀà ��ì $ M�� ��������� ���� �������� � � � � ���� 2� � ��� $ M� � �� �������� 2 ����� � � � ,���� �����'� ��� �Z� � � ���� � ����� 4 � ������� �� � �J3 M ����� ����� <� ���� ����,� 2 � ��� ���������� � ������ � � $ J� �� ��� �� � (� � � � � � ������� � �� ���� �w�� � Q � �������� 4 �� Q � � �ÿ�� ����� �� � ������ �� ���� ��� ��� ��� <� ���� �� ��� ��� � ���� ���� $

üDñûô3öM ������ � ����� � ������'� ��� ������ 2 � ,� �� : $H $ ÿ� ������ ��� ����� Gp $$$qI � � � ���

�;���� ������������ � � ��� (��� ����� G $$$#∗

I $ M�� ����� �� ��� � ���� ����� �� �� �� � �� �� óôòrô�ö $

����� �� �����'�� �� � ���� � ����� �� � ��� ��

file s st package { package } | decl { decl }package s st [ package qname ; ] decl { decl }decl s st class | interface

class s st [ [ attributes ] ] [ abstract ] class name

[ extends qname ][ implements qname { , qname } ]

{ { classuelt ; } }

classuelt s st [ [ attributes ] ] { static | final } type name

| [ [ attributes ] ] { static | abstract }type name ( [ args ] )| [ [ attributes ] ] < init > ( [ args ] )

interface s st [ [ attributes ] ] interface name

[ implements qname { , qname } ]{ { interfaceuelt ; } }

interfaceuelt s st [ [ attributes ] ] type name

| [ [ attributes ] ] type name ( [ args ] )

args s st arg { , arg }arg s st

[ [ attributes ] ] type [ name ]

attributes s stattribute { , attribute }

attribute s st name ident

| callback

| typeuattribute

typeuattribute s st ðôöçæl2 ç| object

| typeuattribute array

type s st basetype | object| basetype [ ]

basetype s st boolean | byte

| char | short | int

| long | float | double

| string | top

object s st qname

qname s st name { . name }

¸ ¹º » : $H 5 Q�� � ��� �� � ����

Page 86: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 d8 d _)j ^ h 'a �] k] b ` h��b [ `_ kb [] i j FF

M�� ����� �� �� ���� ��� � �� v ðñ ðû w $ M�� ����� �� �� ���� � �� � ���� ��� � �� ������� � ��������������� ��� ��� �� ��� � ��� ���������� ��������� �� ��� �� �� � � ��,���� � � � �� � ����� � ��òôõõÿôòr $ M�� ��� �� � ��� ��� ���� ��� ����� � ��� ���� � �� ��� ��� �� �� ��� �� ��� ��� ��� � � ���÷ûïðñ� $

N3ö�ó õö ø 52ûðõð÷ôûðýñ

�äÏWäÒÐ Ú G�äÏW 'ÏÖäËË %ÌÙÓÔ (

ÙÓÔ - 'ÙÓÔ G '/ÓäÚ Ð �ÐÑäÍ ÖÔA�ÌÙÓÔ0 +ÙÓ ÙÔ� áå '/ÓäÚ Ð � ÌÙÓÔ0 +ÙÓ ÙÔ� áÙÓÔ �ÙÓÔ å '!ÌÙ� Ú Ì!ÐÔÌ áÙÓÔ �ÙÓÔ å '!ÌÙ� ÎÚ Ì!ÐÔÌ áÙÓÔ �ÙÓÔ å 'ËÔÎÙÓÒ ÔÌ�ÔÎÙÓÒ áå '!ÌÙ� �ÙË� ÖäG áå '�ÌÍ ÖÐ �ÙËÔäÓ ÏÐ áå ' ÌÌÖÐäÓ Ð1 á%ÌÙÓÔ å ')

/ÏäÖÖ äÏW0 ÏÖäËË %ÌÙÓÔ�ÌÖÌÎÐ Ð-ÔÐÓ�Ë %ÌÙÓÔ (/ÓäÚ Ð �ÐÑäÍ ÖÔA� ÌÙÓÔAÏÌÖÌÎÐ0 +ÙÓ ÙÔ� áå '/ÓäÚ Ð Ú äWÐA� Ï0 +ÙÓ ÙÔ�áÙÓÔ �ÙÓÔ �ËÔÎÙÓÒ å 'ËÔÎÙÓÒ ÒÐÔ�ÌÖÌÎ áå '!ÌÙ� ËÐÔ�ÌÖÌÎ áËÔÎÙÓÒ å ' ÌÌÖ /ÓäÚ Ð Ð1A� Ï0 Ð1 á%ÌÙÓÔ�ÌÖÌÎÐ å)

ÏÖäËË BÍäÒÐ (/ÓäÚ Ð ÐÚ�ÔGAÓÍäÒÐ0 +ÙÓ ÙÔ� áå '!ÌÙ� ä��%ÌÙÓÔ á%ÌÙÓÔ å 'ËÔÎÙÓÒ ÔÌ�ÔÎÙÓÒ áå ')

¸ ¹º » : $E9 5 M�� ���������� ����� ë���À �� ë���À����à ¶ $3 �� �� ���� ��� �� ����� 2 ������� ��� �� ÿ�� ����� �� � ��� ����� ë� ��À �� ë���À����ö ������ ��

<� �� ���� � � � � ������ À �ËÀà ��ì �� � ���� ë���À����ö ���� ��� � ��������� � � � �� �� 2� � ���� �� À�ËÀà ��ì � � ~³� ¶Ã �� � � � �� �� 2 � � ���� �� ì¶À����à � � ÀR �~ $

M �� ������� � ,���� � ��Æ� � ,� �� : $E9 � �������� � � �� ��� � ,���� ÿ�� ����� �� � G� �� �I ����)��� �� ��� � ������'u�� �� � � ��� ��� � ,���� <� � � � �� � ���� �� � �J3 M � ������� � ������ ��������^ G��� � ����� ��� �� ,���� ë���À����à ¶ËÀ³� � �Ç�I $ M� ���� �� ���� ,�� ��� ��� ��� 2 � ,� ��: $EE$

M� ������ � � À¶~À�� �� � �� � ,� �� : $E8 � ����� � � ��������� ��� ����� ë� ��À �� ë� ��À����ö 2 ������ �ÿ�� ����� �� � $ M ��� ���� � �� �������� �� ��� � {d � ��� �� �� ��������� �� ��� � � � � ��� �� ���� �� ���� � ���� �� � ������� �� �� �)����� $

M�� ����� ���� ���� & ���� �� ������ � � ���� �� Æ �~���µ �� � ���� �� <� $ S ��� � � � ������ ��À�����ö���� � ����,����� ��� � � ������ ì¶À����à � � ��� �� �� Æ �~���µ � �& �� �� � ���'��� ����� ����� ������ '� ���� �� ���� �� ����� � ���� �� ��� � � �� �� �w � ��� �� 2 Æ �~���µ ����� ��� �� � ������Ç� $

M ���� �� ��À�����ö�� �OÀ ¶ � ��� �� �� ��,��� � � ���� �� ì¶À����à �� ������� �� � ���� ��������� ���À�����à ¶ËÀ³� � �ÿ�� ����� �� � � � ���� �� � ���� ë���À����à ¶ËÀ³� �� ��/� $

M ��� �� �� � � ���� �� Æ �~� ��µ � � �� ������ �� ���� ���� �+�� � ��� ��� �� �� � � ������� 2 �,� �� : $E" $ M ����� ���� �� � ����� � � �� ��� � � ���À � �~À � � ����� �� � ����� �� ����� '��������� �� ��� ��� �ÿ�� ����� �� � $

J �J �� 6f � �������������� �� �������� ������ � ������'� �� �� ���� ��� �¨�Ç � z² � � � ��� ����� � � � � �� � ������

�� <� ���� ÿ�� ����� �� � $ M �� ������� � � � ,���� �xyz ����� �� ��� ����� ��������� � � � ���Û�äÍ ÙÖÖäÏ ÊÙÓÎÙä ÊÑÎ��-ÖÐÎÌG�ÏäÚ Ö�ä!ä

Page 87: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

F7 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�

point_colore_stub

pointpointPoint

PointColore

point

Java OCaml

PointColoreStubCallback

point_colore_mixteContient une référence sur ...

Légende

Code écrit par le programmeurCode généré à partir de l'idl

point_colore_caml

Code généré à partir de l'idl si callback

pointpoint_colore

point_colore_stubpoint_colore_stub

¸ ¹º » : $EE 5 U ������� ����� �����

������ � � À¶~À�� �� �

Ì�ÐÓ % ''ÖÐÔ � Ñ ÓÐÉ � ÌÙÓÔ & & ''�7�ÙË� ÖäG áå '' áâ & âåÖÐÔ � Ï Ñ ÓÐÉ � ÌÙÓÔAÏÌÖÌÎÐ & " 9 ÖÐÍ 9 ''� Ï7�ÙË� ÖäG áå '' áâ � âåÏÖäËË � ÌÙÓÔAÏÌÖÌÎÐAÏäÚ Ö - G Ï Ñ

Ì �ÐÏÔÙÓØÐÎÙÔ � ÌÙÓÔAÏÌÖÌÎÐ - G Ï äË ËÍ�ÐÎÚ ÐÔØ Ì� ÒÐÔ�ÌÖÌÎ áå Ñ9 /�äÚ Ö 9{ áËÍ�ÐÎ7ÒÐÔ�ÌÖÌÎ áåå { 90 9

ÐÓ� ''ÖÐÔ � ÏÏ Ñ ÓÐÉ � ÌÙÓÔAÏÌÖÌÎÐAÏäÚ Ö & " 9 ÖÐÍ 9 ''� ÏÏ7�ÙË� ÖäG áå '' áâ " âå

ÏÖäËË � ÌÙÓÔAÏÌÖÌÎÐAÚ Ù-ÔÐ - G Ï ÑÌ �ÐÏÔ

ÙÓØÐÎÙÔ A� ÌÙÓÔAÏÌÖÌÎÐ�ÔÍ - G Ï äË ËÍ�ÐÎÚ ÐÔØ Ì� ÒÐÔ�ÌÖÌÎ áå Ñ9 /�äÚ Ö 9{ áËÍ�ÐÎ7ÒÐÔ�ÌÖÌÎ áåå { 90 9

ÐÓ� ''ÖÐÔ � ÏÚ Ñ ÓÐÉ � ÌÙÓÔAÏÌÖÌÎÐAÚ Ù-ÔÐ & " 9 ÖÐÍ 9 ''� ÏÚ 7�ÙË� ÖäG áå '' áâ $ âåÖÐÔ Ö Ñ /á� ÏÏ �� � ÌÙÓÔ å ' á� ÏÚ �� � ÌÙÓÔ å0 ''U ÙËÔ ÊÙÔÐÎ áÑÍÓ - ×� -7�ÙË� ÖäG áåå Ö '' áâ , âå

��� � ���� ����á& �&åá& �"å � ÖÐÍá& �"å � ÖÐÍ

á& �"å �/�äÚ Ö ÖÐÍ0á& �"å � ÖÐÍ á& �"å �/�äÚ Ö ÖÐÍ0

¸ ¹º » : $E8 5 *�� ���� � � � ������ � � <�)ÿ ��� �

Page 88: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 d8 d _)j ^ h 'a �] k] b ` h��b [ `_ kb [] i j FH

�� � ������ �Z�� 2 ������ ���� ��������;� � �� ��� $

��� �¨�Ç �

M ������'� ��� �¨�Ç � '�� �� � ��� �� ÿ�� ����� �� � �� <� 2 ������ ��� �����'�� �� � �� �� ������ 4 <�� F"# � � � <� �� �Û /��@.B E99# � � � ÿ�� ����� �� � $ M�� � ������� <� G� ������� � ������I ���� ��� ����� ��� ��� �� ÿ�� ����� �� � �� �� � ��� �� 4 ������� � � � ������, �� �� � �������� � ����� �� �� �� �� �� � � ���� �� �� � ���� � ��� � ���� � � � ��� �� � ����� � � � ��� ��������� � �� �� � (� � ���� � ��� � ���� ��� ÿ�� ����� �� � ���� ������,��� �� �� � ��� $ ����� ���������� ������ �� � �� ���� ��� � �� ����� � � �� ������ �� � � �� ��� � ��� �� � ���� � G�� ��� �� � ��������� ����� ��� � ��� ������� ���� � ���� �I $ ��� �¨�Ç � ��� ���� �� ����'��� ��� ��������� � � � � ����2 � � ��� �� �� �� �� ����� ��� �� � ���� 4 ��� � �� ��� ������ � �� ��'����� � � ��� ��� ��� $

3 � ���� �� � � � �� ���� �� � ��� �� <� ��� � �� ÿ�� ����� �� � ��� �� ���� � Q � �� <� $ ® ��ÿ�� ����� �� � �� � � ������ �� � � � ���� <� ��� � ����� �� � �� � ���� �� � � � (��� ������� �� �� Q � ��<� � ��� ��� ��'����� �� � ��� ��� �� $ U ����� � �� ��� ��� ��� ��� ÿ�� ����� �� � ����� 2 <� ���� � � ��� ��������� �� � � ��� ����� � Q � � �ÿ�� ����� �� � �� ��� �� � ���� �������� �� <� $

��� �¨�Ç � ��� ����� � � � �� ��� � � ��� �� � ������� ����� ��� �� � � ����� � ��+ �� ��� �� � � ����� �� /1��.m ������� $ ÿ� � �� ��u��� � � ��� �¨�Ç � �+�� ��� � ����� ������ �� ������ � ���� ����� � �������� ��� � ��w � �������� � ���������� ��� ��� �� ��� ��� ���� � ����� ����� �� � ����������� ����;� � �� ��� �� $

|úñúïôûðýñ øö òý øö

ÿ� ����� 2 '��� ������ ����� �� ���� <� ������ ��� � ,���� Ã! 2 �� ���� ÿ�� ����� �� � $��� � � �� �� ������ �� ���� <� ��� ��������� � ��� � �� � ���¨ �� ÿ�� ����� �� � � �� � ���������� ��� �� � �� �� ��� ��� <� �� ��������� ��� ��� ÿ�� ����� �� � $ K� � '������ � ��������������� � �������� �� ����� <� � �� � ������ ����� �� ���� �������� � �� ���� À�� �� ÿ�� ����� �� � $

M ,� �� : $E: ����� ��� ��+ ������ ����� �� ��� �� ��������� �� ÿ�� ����� �� � �� <� �� � �� �������� � �� �������� ��� � � Ã! ����� � ������� � ��� �� � ������ � òôõõÿôòr $

ùèôööç ëåæçñ4ôùç11

æl2 ç îðø çæt1

1ùèôööç çåùô2 öìèôåæç

Wòç æl2 ç

t11 } n

ùèôööçö ~Ci� � öîìö1ùèôööç òç

W~12ôñ ùîåöæñìùæçìñ�1

14îåùæëîå ���������� 2îìñ ùç æl2ç1

14îåùæëîå òç ���� 2îìñ ùç æl2 ç

11

æl2 ç îðø çæt1

1ùèôööç çåùô2 öìèôåæç

Wòç æl2 ç

t~1

2ôñ ùîåöæñìùæçìñ�11

4îåùæëîå ���������� 2îìñ ùçæl2ç11

4îåùæëîå òç ���� 2îìñ ùç æl2 çôóçù ��������11

ùèôööç öîìùnç ~�����11 } n

ùèôööçö ôðöæñôëæçö ~1

2ôñùîåöæñìùæçìñ� òîåæ æîìæçö èçö ï iænîòçööîåæ ùîåùñmæçö11

öîìö1ùèôööç kôóô

11

ùèôööç kôóô ëï2 èôåæôåæ è �ëåæçñ14ôùç11

ùèôööç ôðöæñôëæç òîåæ æîìæçöèçö ï iænîòçö öîåæ ôðöæñôëæçö

¸ ¹º » : $E: 5 ��� ������� ��� ���������

3 �� � ����� ��� � ë���À����à ¶ ��,�� 2 � ,� �� : $EE �� ��,��� � ��� � ��� �� ¨ë���À����ö ��������� ��� ��� � ������� ������� ��� � � Ã!

Page 89: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

79 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�

ÏÖäËË ÔG�Ð �%ÌÙÓÔ ÑÌ �ÐÏÔ

ÙÓØÐÎÙÔ �Ó Ù>ÙÐÎäÎÏØG ÊÔÌ�Ú ÐÔØ Ì� AÒÐÔA�Ó ÙA�%ÌÙÓÔ � �Ó ÙA�%ÌÙÓÔÚ ÐÔØ Ì� ÒÐÔAG � ÍÓ ÙÔ ×� ÙÓÔÚ ÐÔØ Ì� ËÐÔAG � ÙÓÔ ×� ÍÓ ÙÔÚ ÐÔØ Ì� ÒÐÔA- � ÍÓ ÙÔ ×� ÙÓÔÚ ÐÔØ Ì� ËÐÔA- � ÙÓÔ ×� ÍÓ ÙÔÚ ÐÔØ Ì� Ð1 � �%ÌÙÓÔ ×� ÌÌÖÚ ÐÔØ Ì� �ÙËÔäÓ ÏÐ � ÍÓ ÙÔ ×� ÑÖÌäÔÚ ÐÔØ Ì� �ÙË�ÖäG � ÍÓ ÙÔ ×� ÍÓ ÙÔÚ ÐÔØ Ì� ÔÌ�ÔÎÙÓÒ � ÍÓ ÙÔ ×� ËÔÎÙÓÒÚ ÐÔØ Ì� ÎÚ Ì!ÐÔÌ � ÙÓÔ ×� ÙÓÔ ×� ÍÓ ÙÔÚ ÐÔØ Ì� Ú Ì!ÐÔÌ � ÙÓÔ ×� ÙÓÔ ×� ÍÓ ÙÔ

ÐÓ�äÓ� �%ÌÙÓÔ�ÌÖÌÎÐ Ñ

Ì �ÐÏÔÙÓØÐÎÙÔ �%ÌÙÓÔÚ ÐÔØ Ì� AÒÐÔA�Ó ÙA�%ÌÙÓÔ�ÌÖÌÎÐ � �Ó ÙA�%ÌÙÓÔ�ÌÖÌÎÐÚ ÐÔØ Ì� ËÐÔ�ÌÖÌÎ � ËÔÎÙÓÒ ×� ÍÓ ÙÔÚ ÐÔØ Ì� ÒÐÔ�ÌÖÌÎ � ÍÓ ÙÔ ×� ËÔÎÙÓÒ

ÐÓ��� �� � ����� | ������� �} � ���À�����à ¶ �� ����À�����ö�ƶÂ�³ �À ������� �� � � (� � ���� �� �� $

��� ����� ����� ��� �� ��� � ¨ë� ��À����ö $

ÏÖäËË � ÌÙÓÔAÏÌÖÌÎÐ A�� A� & A�� ÑÖÐÔ �ä!äAÌ � Ñ AäÖÖÌÏA�%ÌÙÓÔ�ÌÖÌÎÐ áå ÙÓÖÐÔ A Ñ AÙÓ ÙÔA� ÌÙÓÔAÏÌÖÌÎÐ �ä!äAÌ � A�� A� & A�� ÙÓáÌ �ÐÏÔ áËÐÖÑ å ÙÓØÐÎÙÔ A�%ÌÙÓÔ�ÌÖÌÎÐ �ä!äAÌ � ÐÓ� � �%ÌÙÓÔ�ÌÖÌÎÐ å*� ������� �� � ������ � òôõõÿôòr �� �� ����� ���� ���� |�� ��} ��� ��,��� �� ÿ�� ����� �� � � � �

���� ��� � ���� �� <� ���� � ���� ����,�� ��� � ������� �� ��� �(��� �� � � ��� �� ��� ���� ��� �� ÿ�� ����� �� � $ M � ������� � � � � ���� ��,��� ��� ������� �� � ����� ���� �� ������� � � �� ����| ������� �} G������;�� ������ �� � ���� �� ��I $ M� �� � ����� ��� �� ��' � �� �� ����� | ������� �}��� �� ������� � ��� �� ���� � ���� �(��� <� $

M ,� �� : $E" � � ��� ���� � � ����� � ��� ��� � ��� ����� �� ��,������ ��� � ���� ��� ���� ����� ��� ������� G�� ���� ��� - 0 � � � ë���À����à ¶I $

a

ce

h

i

b

fg

d

Pile Java Pile O'Caml

Classe de définition de la méthode

pcs (pcs)

pcm (pcm)

cb1 (cb)

Tas Java

Tas O'Caml

pcs.toString()pcs.getColor()

pcs.display()pcs.toString()

pcs.getColor()pc

pcs

pc

pcs

pcs

cb1.callbackObject()cb

cb1.callbackObject()cb

pcm#display ()

pcm#_getColorStub ()pcm#getColor ()

pcm#_toStringStub

pcm#getColor ()

pcm#toString

pcm

pcs

pcs

pcs

pcs

pcs

¸ ¹º » : $E" 5 3 ���� � � � �� �� 2 ������ � � � ����À�����ö�� �OÀ¶

Page 90: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

8 d8 d _)j ^ h 'a �] k] b ` h��b [ `_ kb [] i j 7 E

M ������ � � � ��� �� �� ���� � ���À�����à ¶�� �OÀ¶ � ��+�� � �� " ��� �� 4) ��� ���� � � � ��� �� <� � �~ �� ���� ë� ��À����öËÀ³� �) ��� ���� �� � ���� �� ÿ�� ����� �� �) �� ���������� �� � ���� �� ÿ�� ����� �� � � �� �� � ��'����� � � � �~) �� ���������� �� � ���� �� <� � �~ � � �� ������� 4

) �� �� 2 � ��� �������� � �� ë� ��À����ö) ��� ���� � � � ��� �� <� �� �� ���� �������^) �� ���������� �� � ���� �� �� �� �� ��'����� � � � �������� � ������ ������ ����� �� � � ����� ���� ����� ����� � ��� � ��� �� ����������� � ����� ������� $

K� � �� ��� ����� | ������� �} ������ ����� 2 �� �� �� òôõõÿôòr ���� ������� �������� �� �� � � ������ (��� �������� �� ��������� ���� � ��� � ��� 2 �� ���� ���� ��� � ���� �� <� $

N3ûöñ÷ðýñ øö÷ � ý ø� õö÷ ýÿ � öû÷� ª�� ��õ �� � ������ 2 � ��� ��� �� ����� ��� �� � � � �;��� ��� ��� $ ÿ� ��� ���� �� �� ������ � ����� ������

�� � ������� � ���� �� �� ÿ�� ����� �� � �� ����� <� �� �� �+ �� �� �� ����,���� ���� �� � ����� � Gm>[email protected]/I �� ÿ�� ����� �� � $

� úïðûô�ö �2 õû ðó õö M ����� ��� � ���� ��� ������ �� " E# $ ÿ� ��,��� �� � ��������� �� ����� �� <� 4 ������ ��� ������ �� �� ��� ��� ��� ���� ����� �� $ ��� � �������� � ���;�� �� ���� `¶ �À ��ì�¶ $ M� ������ � �ÿ�� ����� �� � � ���� ��� �� ���� ������� �� �� �� � ����� <� $

,���� g ��Æ� ������ � � ÿ�� ����� �� �

�äÏWäÒÐ =Îä�Ø '/ÓäÚ Ð ÎÐÏÔäÓÒÖÐAÒÎä�Ø0 ÏÖäËË ;ÐÏÔäÓÒÖÐ( +ÙÓ ÙÔ� á%ÌÙÓÔ �%ÌÙÓÔ å '

�ÔÎÙÓÒ ÔÌ�ÔÎÙÓÒ áå ')�äÏWäÒÐ =ÐÌ '/ÓäÚ Ð ÎÐÏÔäÓÒÖÐAÒÐÌ0 ÏÖäËË ;ÐÏÔäÓÒÖÐ( +ÙÓ ÙÔ� á%ÌÙÓÔ %ÌÙÓÔ å '

�ÌÍ ÖÐ ÏÌÚ�ÍÔÐAäÐÎä áå ')

Ì�ÐÓ � 'ÏÖäËË ÎÐÏÔäÓÒÖÐAÒÐÌAÒÎä�Ø � & � � ÑÌ �ÐÏÔ

ÙÓØÐÎÙÔ ÎÐÏÔäÓÒÖÐAÒÐÌ � & � � äË ËÍ�ÐÎAÒÐÌÙÓØÐÎÙÔ ÎÐÏÔäÓÒÖÐAÒÎä�Ø � & � � äË ËÍ�ÐÎAÒÎä�Ø

ÐÓ� ''ÖÐÔ � & Ñ ÓÐÉ �ÌÙÓÔ &� &� ''ÖÐÔ � � Ñ ÓÐÉ �ÌÙÓÔ �� �� ''ÖÐÔ ÎÒÒ Ñ ÓÐÉ ÎÐÏÔäÓÒÖÐAÒÐÌAÒÎä�Ø � & � � ''%ÎÙÓÔÑ Ê�ÎÙÓÔÑ 9äÐÎäÑbÒÓ 9 ÎÒÒ7ÏÌÚ�ÍÔÐAäÎÐä áå ''%ÎÙÓÔÑ Ê�ÎÙÓÔÑ 9ÔÌ�ÔÎÙÓÒÑbËÓ 9 ÎÒÒ7ÔÌ�ÔÎÙÓÒ áå ''

� M�����L ÿ�� ����� �� � � � ������ �� �� ������ �� ����� ���� �� � � ���� ���� ��� �� �����)'� �� <� �� ��� �������� � ���� � � � ��� ��� ��� �������� � � � � � � ��� <� $ 3 �� � ����� ����� � ,� �� : $E8 �� ����� ���� �� ����� � �� � ���À �� � �)� ������ ������� 2 ��� � ����� ������ $ ÿ� )������ ���� � � ��������� ��� '������� �� ��������� �� ��� � �� À�� ���� �� ��� � ÿ�� ����� �� � � � �� ����<� $ ��� '������� ��������� �� �������� �� �� ��� � � ���� �� �� ������ $

ÖÐÔ Ö Ñ /á� ÏÏ �� � ÌÙÓÔ å ' á� ÏÚ �� � ÌÙÓÔ å0 ''ÖÐÔ ÖÏ Ñ UÙË� ÊÚ ä� áÑÍÓ - ×� ÔÌ� AÔÌA�%ÌÙÓÔ�ÌÖÌÎÐ á- �� ÔÌ� åå Ö ''ÿ� ���� �� ��� �������� ��� ��������� �� ��� � ������ 2 ÿ�� ����� �� � $

Page 91: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

78 [\ ] ^_ `a b 8 d _f `b a h^�a ]� _j_ `�§ ý ø� õö÷ ýÿ � öû M� '�� �� �� ���� ������� �� � ��;�� ��� �� �� <� � ���� �� ����� $ ÿ����W� �� x��������� � ����� � � ���� ������� � ��� ����� � 2 <� ��� �� � ����;� � E!!# $ J�� � � ����� ���� 2 <� � ����� �� ������ � ���� ��� �� � �ÿ�� ����� �� � $ M ����� ���� �� K�aa ���� Q����� <� 86# �������� �� �� ����� �� ������ ���� � � ���� ������� � � ���� $ ����� ������� �� ��������� �� ����� �� ���������� � ��� �� �� $ M� ����� ������ ������ JM¶ E"6# �� �� � �� � ������ � � L OJM � � � '������ ����� ����� �� �� ������ 2 � L M � �� ��� � � � ����� � ��� ��� ´ �@ ��?0D �� �� $

3 ��� ��� ������ '���������� � ��,������ � ����������� ��� ��� �� � � ÿ�� ����� �� � ������ ��N�2 � ����� ������ �� �� ������ ��� � ������ ���������� 8"# $ x ��� ���� �� � ����� � � �� �������� ���������� ����� ��� ���� �� �� � ���� �� � ���� � � ����� ����� � ::# ������� �������� � � � � ����������� ������ � ��;��� �� �������� Gà �D?´@ Á .//��@DI $

» m� �qmpt�onqm q @%q t�knqm $lo nmkl½¿r plo

M ����� ���� ��� �����'�� ��� �� � ������ � � ��� ����� �����;��� ����� � ��� ������ '���������� ��� '������� � � � ��� ��� � � ��� �'��� �� ����� � � �� �� ������� ,�� $ M ����� ��� �� � � �� � � �� �������� '������������ �� � �� �� ��� � �Z���� $ J� ' � ��� ���� � � ���� ������ � �������� �������� ��� ����� ��� ��� �� � ��� �� �� � � ��� ���������� ��� ��+ ������ ������ � ��� �������� � �� ��� � ����� ��� ���� �� ���� �� � �)� $ x ��� ���� �� � � ���� � ��¯ �������� ��� ��� Ã!� � �� ���� ���� ��������� ������ ��������� �� � ���� �� '���� ��� � ���� ��� �� � ��� ������ $ K� ���� ��� �� ����� ������ ��� ��� ;���� ��� �ÿU S P 8 $9 � �� � ���¯ ��� �� A GA �Ä >/�  �/1>m @�>0./?>@I �� <� $ ÿ������ ��� 2 2 ������� 2 ������ �� ������ ��� ����� ´Rö�Æ � � � � ���� ���� ����� ���� � � �� ����� � $³ � �� ��� ����� ����� E8:# ������ �� ���� « J� � � � ������� ��������� ��� ��� � �� ��� � ����� ������ �� �������� � ����� �� ��'����� $

M�� ��& ���� � ���� ���� ����� 2 � ������� � �� ���� �� � ���)�������� � � ���� (��� ��� ���,��� ��� � ��������� � � � ���������� ��� � ���� ���� �� � � �� � � � � ���� ���� ���� <� � � ����)'��� �$x *y $ M ������'u�� �� ������ � ��� �� =� ������ �� ���� ��� �� ��� �� �� ��'������ � � �� ������� ����� ��� ��� �� ����� � ����� $ M� � ���)�������� � ���)������ � � ��� � ��� ��� ��& ���� �� � ������ ��/1��.mD ��� ����� � � � ���� �� � �������� �� $ K� � ������ �� �����;� �� �� � ����� ����� � ª�� ��õ� � � �� �� ����� � ÿ ��P L �M ����� ������ E$

M �������� �������� ����� ������ � � � ����� ��� � ��� ���� �� � �� � ������'� �� � ����� ��� ��� �� $ M ������ �� ��� � �� ����� � � � � ����� G� � � ��� �� � � � � �� />- B���BI � ��� �� �� �� ����� 2 ������ ��� ������ � �� ��� � �� � ���� ���� �� � ��������� $ ÿ� � � � ���� ������� � ������ �� ��� ������ � ���� ��������� �� � �� � � � Ã! $ ��� ������ � �����'u�� ���� �� � 2 � ����� $ M ����,���� �� ��� ��� � � � ���� � ������ � ������� � � � � ª����õ � � ������� � � ��� ����� ����� � �� � ����� �P L M �2 ����,�� 2 � ,� � � �� �������� � � �� ���� � ��� ������ �� � ���� <� ������ ������ $ ����� ����� ���� ������ ������� 2 �� ������� �� ����� ������� $ ÿ� ������� ���� �� ������� �������� ���� �� � �Z���� ������ � �����'u�� ���� �� �� ��� ��������� �� ����� <� � �� $

Page 92: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� �� ���� �

  �ü õýö � � � ø � �� ¡ ¢ � ¢ �ü� úöù ù �ø � ��

M� ������ E ��� �� ����� ����� ����� 2 � � ��������� ��� ��������� � ��� ��������;� �� �������)� ��� �� L M $ O� ��� ��������� ÿ�� ����� �� � ���� � ���)� ���'��� �� � �� �� ���� ���� ��� � ��� � � ��������� � � �� � � �� ��+ ������� �����)'��� �� $ K� � �� �� � ������ � ����� 2 � ���������� ��� �� �������)� �� ��� � ������ $ ÿ� ������ �� ���������� ��� �� �������� �� ��� � �������� � �� ���� '������ ������ ���� �N�� � ������ � � � $ ÿ� � � � ������ ��� � ���� � ����� 4 ����� � ��� � �� � ��� �� � ���� ���� � �����)����� �� � ���� �� � �� � � �� �� �� � ��'��� ��� � ��� 2 � ����� ���� � ���������� � ��� � ���� ����� � �������� � ������� �� �������� � �� $ ��� � ���� � � ���� ������� � '��� � � � � �������� �� �� � ����������� G2 � % ��� I � (��� �������� ��� � ÃB z $ M ��� ������ �� � � ���� � � � ���������� ��� ��� � ������� ���� �� ���� � � � ����� � � � �� ������ � ������ � � �� $

ÿ� � � � ���� *� �� �� � � � ��� � ��� � �� ���;��� �� ���� ����� � ������ � ��� � �� �� � �� ������� $O � ��� �����)'��� �� %��� í¶ )R ����R � *� � ��� �������� ��� � �� ��� �� �� � ������ � � � ÿ�� ����� �� � $x ��� ���� � ����� �� � �� � � � ��� ��� �� ������ � � � x ����R � $

M�� � ���� �� � ��� � ���� ��� ������ L M � �� � �������� ��� ��� ������ ����� �� ��� ��� ��� ���� ������ �� �� ����� � ���� � �� �� ������� ����� �� �� �� ������ � � ���,���� � '�� � � ������� � � ���� ���� ��� � � � � �� �� �������� � ���'��� ���� �� ����� 2 � ���� ���� $ J� ��� ���� ��& ���� ��������� ��� ��� �� G�� �� ��� � � ��,��I 2 � ���� ���� 2 � ���� � � � � ��� �� � ��� � ���� $ x � � ���� ��� 2��� � � ���� ��& ��� ���� �� � �� ������� ���� �� � ���� ������� ��� �� G���� ������ EI �� ���� �� � � �������� G���� ������ 8I $ % �� ������� ��;� � ������ |U ���� � y�� P��� �� x ������}� �P ����R P�� �� 7# � � ��� � ��� �� � �� �& ��� � ���� �� � �� � ��� �� � �� ���� �� � ���� ������� ����� � � ��� � ����� ������ � �������� ����� ���� ��� $ M ��� � ������� ������ �� '�� � � ��� � ���� ��������� � �� � � � �� ���� �� ��� ������ ������ �� ����� ��� � ������� ��� ��� ��� �� ��� ��� �� � ��� ����2 � ���� ���� $

M�� ��� � ��������� ��� � ������ ���� � ���� � � ��� � � ��� ��� ��������� $ J� ' � ��� ����������� � � ��� ������ � � �� � � ������ ��� � ' � � ����� $ M ���� �;�� ������ ��� ���� ���;��� ��� ��� � ����������� ������� �� ÿ�� ����� �� � $ M �� � �;� � ������ ����� � ÃB � ������ � � � ÿ�� ����� �� � ��� ��� � ���ƶ !6#° � � � ������� ��� ���� �;��� ���� �� � � � � � ��� � � � �� ���� $ J� ��� �N�� � � � �� ����� ����� ���� � �� ���� *�����± �� ��� �� ����� �� <� $ �� ����� ��� ��������� ��� �Z 2 P �������3 �W��� �� M����� 3 ���� ������ �� � �� ����� $ M ������;� � ������ �������� � ����� �� � � ��K�� L �� �� �� S� �� K��� � � �� ������� ���� �� ��� �� �� �Z� ��������� $ ����� ������� ����������� ��� ���� ���� 2 ����� � � �� ��'��� ���� �������� �� ��� � ��� �� ��� ��� ��� �� ����� 2 � ���� ���� $

�£¤RV¥ ¦§RV¨ © VWVUSTª V¤R «¤W¬¦S¤ª V¤R©ªÉÉÉ ÊÒÓÍ ÊÌÎÒ�ËÌÑÔÉäÎÐ�ÐÚ äÏË�ÐÚ äÏË ÊØÔÚ ÖÈÒÖäÖÐ-� ÊÑÎÐÐ ÊÑÎ�ÐÏÖÙ� ËÐ�Ì�ÔÍ��äÔÐÕÉÉÉ ÊÐÏÖÙ� ËÐ ÊÌÎÒ

7:

Page 93: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

7" [\ ] ^_ `a b ­ d bf k_a hf f bi bf `g )b )� kb j h^^bi bf `

� mn im% n½qmmls lmk okrm$r½$ ¼ q�½ gop lpkn%l �r s t

M ����������� ��� �� �������� �� ��� ������ �� � ������� ���� ÿ�� ����� �� � ��� ��� � � � ��������� �� ���� ������ '��������� ��������� ��� �� � % ��� $ *� � � � � (��� �������� �� � � � � ÃB � �ÿ�� ������� � $ ÿ� ��� �� �� ��� �� � � ��� �� ��,� ����� *� � � � � � ����� $ J� ��� ��� � ����� �� �� �� ����� �� � � �� � �� �������� � � �� ��� �� ���� �� />- B���B ��� �� '��(��� �� � ������ � � ��� ����� � ���� ����� ������ �� ������ � � � � � ��� ����� �� � ����� $ *� ��� ������ �� ��� � ���� �������� �� � � � ��� �ƶ��� � ��� �� �^¶ � ��������� ��� ��� ������ �� ��� � W�, ��� ��� '������ $ M� ����������� �� ������� �v O ����� �) ��� �� ����� ��� *� � $ M ��������� �� �� � �������� ������ � �� � ��� ���� �Æ� � ����������� �� � � ��� � ������� ���� � ����� $ ÿ� ����� �� �� �� ��+������� �� � ���� �� ������ ���'������������ � � � �������� ÃB $

3 � �� � ��� � ���� �� m��C´ �� �� - �>® B?@´ � � �� �������� � � ���� (��� ���� � � � & ��� � � ��� � ���� $ M� m��C´´ �� � �ÿ�� ����� �� � � �Z 2 <���� � v� ����� � � ��� �� � ��������� � ���� � ���� ���� �� � ���;��� � ����� ����� �� ��� � �� �� ��� ���� $ K� ����� � ����������� ��� ��� �� �� �� �� � � ��,����� �� �� ��� 2� �������� 2 � ���� ���� � ��� � ��� ��� �� $ M� - �>® B�� � �� ����� � ���' � �ÿ�� ����� �� � ���� �� � ��� ��� 2 � � ��;�� �� � �� � ��� ì�à � $

M ��������� �� �� � ���� ��� ������ � � � �� � ���� % ��� $ J�� �� � ������� �� ���� 2 � ����)'��� �x ����R � $ K� ���� ��� �� m��C´´ �� ������ � ��� �� ����;� � Â�Ã^ � � � � ���� �� ��� ��� ��� � � ���� ������ � � � � � ����� ��� � �� �� ������� $ J� ��� ����� � ����� �� � ��������� � ���������� ��� |2 � % ��� } �� �x ����R � �� � � ���R ��² � � �� � (� � ���� �� �� ����� �� �� �� ��'��� ����� � �% ��� $ K� � �� ���������� ��� ���� �;��� ���� �� � � � ÃB � ������ $

� ml ¯° ± ¼ q½kro tlo q i ptn¼ ol*����� ��� �������� � �� � 0>@D>�/?CÄÅ � ���� ������� � � '��;�� �� �� � � �� �� � ������ � � �����)

�� �� � �������� � �� �� ����� �� $ *����� ��� ��,�� �� � � ��;�� � ����� 4|B 0B?- D� ?D . Ø ?@m >X C@?���D.B - B./X >�Ä A .@ >- �@ �Û /�@D?�B� ÃB X >� .@� /1 ?@´ .@m @>/1 ?@´ ?@- .�/?0C B.� °}

� ���� �� � (� � ��� �� �� ����)'��� � �� �������� �� ��� � � ÃB �� ��,� �� �� � ���������� ��� � ���� ������ �� ÃB � � � � ����� ���� � ���������� $

*����� �+�� � � ����� � �� - BC´ ?@D � � � � ���� ���� ��� �� �� � ÃB � � ���� �� ��,� �� $ P ��)� ���� � �*����� ��� ��+������ - BC´ ?@D ������� ���� ����� ��� 2 � � ������� � $ K� � '������ � ����� �� ��- BC´ ?@D � *����� �+�� �� ������ ��� ��������;� �� <� � ������� � � � � � ��� ����� � � � ����� � ��� )� �� � � ������ �� ��� �� � ���� �������� � � ����� ���� � ������'�� ������� � � �� $ÿ� ��� �� �� ������ ��� ������������ � �� � �������� �� ������ � � *����� $ ÿ� � � � ���� � �����;�� EE"# z �� � ����������� �� � ����� �� � ���� ��� - BC´ ?@ E96#�e �� �� & ��É �������� � ÇK ���� ��

*����� ��� ��� � �� �� �� �)����;� �� G�� ������ � �)� (� �� �� ��� - BC´ ?@DI � � '��� �� �� Á B./X >�ÄAC@ /?Ä � G���������� ��� � ���� ���� �� � ����)'��� �I $ M� ²>�ØD- .0� G���������� ��� �� �����I '� ���� ��Á Å G�����'� �� ������ � ���� I � � � � ������� ��� ����� ��� ����� ����;� � �� ,����� $ M� ²>�Ø��@ 01G��� �� �����I ������ ��� 2 � ������'� ������� � $ O�� Á ��,��� ��� � ����� � ���������� � � � ��� ����� �� �� �� � � � �� $ J� ������ <T� ���� � � Ox y zC � � � � ����� ���� ��� �����'�� ������� �� $ M� ³ �B-

ÛÉÉÉ ÊÏGÒÉ ÙÓ ÊÏÌÚÜÉÉÉ ÊÐÏÖÙ� ËÐ ÊÌÎÒ�ÌÎÒ�ÙÓ�Ð- ÊØÔÚ Ö�ÉÉÉ ÊÐÏÖÙ� ËÐ ÊÌÎÒ�ÉØ ÙÔÐ�ä�ÐÎË�ÐÏÖÙ� ËÐ ×Ì!ÐÎ!ÙÐÉ Ê��Ñ�ÉÉÉ ÊÐÏÖÙ� ËÐ ÊÌÎÒ�äÎÔÙÏÖÐË�@ÎÔÙÏÖÐ×%T� ×�ÌÐË×� ÖÍÒ ÙÓ Ë�%T� ×ÙÓÔÎÌ ÊØÔÚ ÖδTT U¬µ§R¬S¤ ¶ ¦S¥¦§ªª ¬¤¥ £¤RV¦· §µV�X ¸R§¤¨§¦¨ ¹¬¨¥ VR ºSSU» ¬R©

Page 94: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

­ dc d J3 * ^ ha`]�jb g � b [j_^ gb 7!

À�D/�Ä G����;� � � ����I ��� 2 ������� � � � ���� ��� ���� �� '��� �  y L M � ����� ��� ��� ����� �� � ��;����� � ������� �� � �� �� $ M� ��.Ä ÀC-- >�/ � ��� �� �� ������� �� �������� � ���) ������� �� �� � �� ������v Ozz $

e �� �� ¼ I½¾¿À � ��� ��� ������ ��f �y� � ��� �� �)����;� �� ���� �� ������ �� <� $ M� - BC´ ?@ � �� �ƶ � � � ÿ�� ����� �� � ��� ������ �� <�

� ���� 2 �� ���� �� ��� �� � ���� ������� 2 � ������� ���� ÿ�� ����� �� � �� �� � ���� ��� ��� ���� � � ���� ����� � ��+ ������ �� � ����� �� � ����� �� ����� $

����ƶ ��,��� � � ���� � ���� �� ÿ�� ����� �� � � � ��� �� �� ���� ��� ��,� ������ �� �� ��������� ��,� �� �� ��� ��� �� ���� �� ��� �� � ���� ����� �P L M $�����)� ��� � � � ����� �� ����� �� � ���a���� ��������� G���� ,� �� " $EI 4

5 � a��� �� �������� ��� �� ���� �� G|x ������}I �5 � a��� � �������� �5 � a��� �� �������� ��� � ,���� G|ÿ �����}I �5 � a��� � ���'��� ����� �� � �� ������� G|y�W�}I �� �� � ���� ���� |�������}I $

¸ ¹º » " $E 5 ��� �� � � �� ������� *����� GL ÿO¶ I

M�� ��'��� ����� ��� �� �� � �� ������� � ���� �� ���� ��� �� ���� ��� � ������ � GY .�@?@´D �� ���� ��I $

% �� ����� � � �� ���� ������� 2 �� � ���� ��� ��'��� ����� ��� � ���� �� ��� � ���� �� � ������� ����ÿ�� ����� �� � $ M�� ��� ������ ��� ��+ ������ � �� ��� � � � ���� �� ���� � ���� �� � �� � ������� �ƶ� $ M�� Y .�@?@´D �� ���� �� �� �� ������� ���� �� '� �� � �� ����� � �� ���)� ��� ���� ��$M �������� ��� ��� ��������� ������� � � � � � � �� ������ � ������� yÆ��à ~¶Àà ¶¶ � �� ����� �� � ��� � �� � ����� �� ������ � � � � � � �� $ M�� ����� �� ��� � � �� ����� �� �� ���� �� ����� ����� �� � ���� � ��� ��¶O �� � ��� �µ ��� $ y� ��� �� �� � ���� ���� �������� ���� �� � ������ � � ����,� ����� �� ���� �� $ M ���� ���� � � � ���� �� ��� � � ���� ���� ���� ÿ�� ����� �� � � � � ��� )���� �� ���)� ��� $ K� � �������� � ��������� � �� � ��������� � ����ƶ ������ �� �� ����� � � ��)���� $

�� ÁS¤µÂ¦¦V¤R ÃV¦Ä¬S¤Ä ¸ÅÄRVª ©

Page 95: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

76 [\ ] ^_ `a b ­ d bf k_a hf f bi bf `g )b )� kb j h^^bi bf `

M �� ��;� � ����� �� � ������ � �������� �� ��� ������� 2 ��� ����� � ������ � ��� � �� � � � ������� ÿ�� ����� �� � �� � � ��������� ��� ��������;� �� � ²>�Ø ��@01 � � � � ������� � ���� �� $ ������ � � ������'� � � ��������� � ����������� �� �������� G� ÆÀI $

M ����������� � �����ƶ � � � (��� �+�� �� �?. �� ����� � 2 ������ 2 ����� � � � ���� Y ��$ M�� � ����2 � � � � ��� ���� � � �� � ����� $

N3ö� ó õö÷ ø 52ûðõð÷ôûðýñM ���� �;�� ������� G,� �� " $EI � ����� ��� � ��� '��(���� ��������� �� � ����� �� ����� �� � � ���� �����

�� �z� $M '��(��� |x ������} � ��� �� �� ����������� � ���� �� �� ��� ����� ��� G��� � ����� ��� �� ���� ��

�à �¨¶ÀÜ �� ��� ,����� Ç� �� � �� ½� �� �I $ M '��(��� �� � ������ � & �� �� ,���� ½� �� � ������ ����� � ���� � ������� � ���� �� $ M �� ������� � ���� �� �������� � ��� ���� �à �¨¶ÀÜ �¶O¶ � � ��� ��� ���� '��(��� |�������}$

³ �� � � ������ � � � ���� ��� � ���� �� � �� ��� ���� ���� ���� � � ��� ����� ��� ��� ����� �� � � $v � ������� �� �� ������� � � � ������� � � � � ���� � �������� � � �� - BC´ ?@ � �)� (� � �+ �� � �� ����� $J� � ��� ��� ���� � �� � ���� � �� �� �� ����� � ÿ�� ����� �� � $

M� ���� �� ��� Ä ��� ,� ��� " $8 �� " $: ������� ��� ,����� � � �� �� � � � �Æ Ä �� � �� �� � ���� �� � � � �� ȳ¶³¶�� � ������� ���� ������ $

M��� �� � �������� � � � ,���� � � '��(��� |ÿ �����} � ��� �� �� �������� ��� ��� ��������� ��������� � � �� ���� ��� � '������ ���µ �� g³¶³ ¶ �� � 2 � ,� �� " $8 $ M '��(��� |y�W�} ����� � ��� Y .�@?@´ D ��� ���� �;�� ���� � �� �� ������� � � � �� � ,���� � � ���� ��� ������ ��� � ������ � $ ����� �������� ���

¸¹º » " $8 5 ��� �� � � �� ������� *����� Gx ����R �I�ªÞ � è £� ¤�¢� £��  ¦¡¢�� ¤� 衬¤ 7��¦§� ¤� £� «�¢[�¬� ଠ¢¦ à�£� ©

Page 96: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

­ d8 d `É^b g Ê j Ëbe� [ '`_ hf 7F

��� �� ��� � ��+�� � �� ������� � ���'��� ���� ����� ��� �� � �� ������� GyÆ� �à ~¶Àö¶I $ M�� ������������������ ���� ��� � ��� hÇ�� G���� ,� �� " $:I $

¸ ¹º » " $: 5 ��� �� � � �� ������� *����� Gx ����R �I

e �� �J Ì �f ��Z�������� ����������� � ���� �� � �� ��� � ���ƶ � ����� � ��� � � ����������� ��� ������� � ������ $ M

� ���� ����� �� � ������ � ������ ����� �� Í��� ����� ��� � ���� �� � ������� ���� ÿ�� ����� �� � $ M� m��C´´ ��� �ÿ�� ����� �� � Í��������� ��� �� ��� �� � % ��� � � �� � (��� ������� � � � �������� � � ��������� $

M � ÃB � �� �ƶ ��� ���� �� <� $ % �� ����� �� ��� � �� ���� 2 �����Í�� ��� � ���� � �ÿ�� ����� �� ��� <� $ M ������� ������� ������� � � Ã! � ª����õ � ����� ������ : � � � � � � ���� �������� �� ��ÿ�� ����� �� � �� Í������ � ���������� ��� � ���� ������� �� ����� � �� ��� ��������;� �� � �* ����� $

� m» >�¼ lo Î t Ïlj@p�knqmM�� ������ � ���� ������ ��� ����� �� � ����� �� ��� ��� �� 2 � L M � � ���� �� � ����� �� ��������

� ��� Í��� ����� �� ��� � � � ��� ��� �� ����� ���� � � � �� ��� ���� �Z�� � ?°�° ��� ���� � � ���� ���� � � � ��� �� $

*� � � ���� �� �� ���� �� ������ � � �w �� ��� �������� �� � ��� ��� �� �� Í��� ���� �� ��� �� 2� ���� ���� $ ÿ� � � � ���� ��� ��� ���� � ����� 4

5 � � � � ��� �������� �� Q � ��� � �� � G/.´I �5 � � � ��� Í������� � ���� ������ ��� ����� � ��� � ��� �� � ���� �� � � �à ��À � ¶Ç�� �5 � � � � � �������� ��� ��� �� GQà �À ¶ �� à ¶�ÆI �5 � � � � �� � ������ ����� ������ � �5 � � � ��� � ���� �� � ��� � ���� �� � � � ����������� �� ��� �� �� �� � � ���,���� �5 � � � ��� ���������� � ����� � � � � � ����� � �� �� �)����� �� �� 0.D/$x � � ���� ��� 2 �������� ������ �� �� �����;� �� ��� ��� ������� ��������� � � �� ��� ������ ������

�� � ��;�� �� ��,� � $ M � ��� ����� �� ��� �� 2 � ���� ���� ��� � ��� �� � ������ � � ��� � ��� � �� ��

Page 97: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

77 [\ ] ^_ `a b ­ d bf k_a hf f bi bf `g )b )� kb j h^^bi bf `

�� ����� �� � ��;�� ������ $

e �J �� E � �Y ��� �� ���É� �Z��� � Ç�f � ���������ÿ� � � � ������ �� ������� �� �� ��+ ������ ���� � � ���� �� � � � ����� �� �� ��� �� �������� $

y� � � �� ��� ��� ��� �� ��� ��� ���� �� �� ��� ����)����� �������� ��������� ��� � �� ������� ��� « 3 �� ������ ��� � �� ����� ���;��� � |����� �� �} GƵ��� ��I �� � � ��� ����� � ��� � ������ 2 �� �������� � � ��+�� � �� � ,����� � � � ��� � GÀµ�¶y��~¶I $ O�� ��������� ��� ��� ��� ���� � ��� �� ��������� ���� ��������� ��� �� �� ������ � � � E9 E� E# $

% �� ��� ������ ��� �� ���� � � �� ��� ��� ��� �� ���� ��� Ƶ��� ��~ $ K� � ������ �� ���� �� �� ���� ��� � ��� � � ���;�� � ��� � � � ��� �������� �������� � ������ � � � ���� (��� ����� �� $ ÿ� ������� ����� �� � � � �� ��� ���� �� ���� � ������ � � � �� � � �� ���� ��� � � � � m��C´´ �� � �� � ���� �������� ���� $ �� ������� � ������ � ��� � ������ �� ������� � �� ���� � �� � � ��������� ��� ��� � �� �� ��� � ������ $ P ��� � � ��� �� � ��� � ���� � � � ���� ��� � ��Í��� ��� Í����� � ��� � ������ � ����� ����� ���� �� � �� ���� �� (��� �Z�� � ��� �� � � � �� ��� ���� ���� �� $ M�� ��& ���� �������������� ����� � � ��Í��� ��� �������� $

ÿ� ������� � ���� ����� � 4E$ �� ��� ��� ��� �� ��� � ��� � ���� �� � ��� �� �8 $ �� ��� � ���� �� � �� �� � ��� � � � � (��� ������� �� �: $ �� ��� � ���� �� � � � �� ��� � � � � (��� ������� �� ��������� ��� $

M ����� ���� ������ ��� � � � � ��� � ��� �� �� � ������ ��� 2 �� � ��� � ����� ��� �������� ����� � �� �� ����� �� � ��������� � �� ����� �� � ���� �� �� ������� $ ³ �� � ����� ���� �� ��� �G�������� � ����� �� �I � ��� ��� � ��� � �� �� � ������ ��� �� ��,���� $ M ����������� ��� � ���� ����������� � ����������� ��� �� ����� � � � ��� ��������� $ � ���� � ����� ���� �� ��� �� � �� � ������ �� ��� � ����� $ M ��������� � � � ��� �� � � �� 2 � � � $ M�� ���� �������� �� ���� �� �� ���� �� ��� � � �� �������� �� � ������� ���� � � � � � � ��& ��� � ���� ���� $

M ���� �;�� ������ ��� �� ������� �� � � � ��� � ���� �� � ��� �� 2 �� ��� � $ ��� �)� ��� ����� �� 2 � ��� ��� $ 3 �� �� ��� � � ���� ������� � ��� ����� � � �� �� �������� � � � G�� �����)����� �� � ����I �� � & � �� $ J� �� ���� ����� � �w ����)� ����� 4 � ��������� �������� ����� �� ���� �� ��� �� �� � �� �� ������� �� �� ��� � �� � ��� � ��� � � �+ ������ � � �� ������� ���� � ��� � ����� ��� ��� ��� � � �� �������� ��� � � �� �������� �+ � �� ����� �� � �� ������� $ K� � �� ��� �� ��� ������� � ���� �� ����� ������� (��� � � ���� $

P���� ��� � ����� ���� � � � m��C´´ �� � � � J� :# � � �� �� �� Í��� ���� � � ��� ��� ;���� �� ��� ��� � � ������� Í������� � ���� ������ �� � � ��� �� ������� ��� ������� ��� ��� ��� �� ��� ��� �� �� � ���)�������� ��� � � �� Í��� �� �� $ J� ������ ��� ��� ����� � ��� �� �� Í������� �w � ��� Í��� ���� �� ��� �� � � � (���� ��� �� ��� ����� �������� $ M ��������� � �� ������� ���� �� ��� �� ������ ���� � ��� Í��� ���� ����� ���� � ���� �� � ��� Í��� ���� � ����� ������ ���� ������� $ ����� ������ � ��� ��� ������� � � � � m��C´´ ��OL M E!9# $

K� � ��� Q � �� �� �������� ��� � �� � � � � ������� � Q � 2 ����� ���� � E!7 � 7H# �� ������ �������� ���� ��� ��� �� $ ����� ������ � ��� ������� ��� ��� Q � � � � � 88# �� � � ��� ��L M : E# $ %�� ��� ���� ��� �������� ��� �� � � �� ������� ��� �� ��� � ��� ��� �� � �� �� ��� �������� $ 3 �� F8#��� ��� �� ���� �� ��� ��� ��������� ��� ������� ��� 2 ����� �� � ���� �� �� ������� �� ������� ���� �� ��)������ � � � ������� ������� � ���� ������ $ M � ��;�� ���� ��� ��� �� �� � ����������� ��� � � �� ��� �� ����� ��� ����� ���� � ���� �� � ����� �� � ��w � �������� �� �������� �� ����� �� ���� �� ��� ���� $ M������� ���� ����� �������� � ���� ���� ��� � � � � ��������� �� � ��� ��� ���� ����� ��� ����� ������� � � �� Q � �� � � � ������ � S ��� � �� Q���� ��� 4

|.@� >�= �0/ Y1>D� /�- � 0.@@>/ �� ��0>@D/�C0/�m �� /1 � =� ?D ´ .��.´ �°}P���� ��� "# ������� � ������ � � � � �� m��C´ �� � � ��� �� �� Í��� ���� �� ��� � �� � � �� � ����� ����� ������� G� � �� ��� ������ ��� � ����I 2 ������� Í������� � ���� ������ $ P ����R y��� � ��� E! E# � � �� ������ ��� �� ��� �� �� Í��� ���� �� ��� �� � � � �� ��� ��� Í������� � ���� ������ $

Page 98: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

­ d8 d `É^b g Ê j Ëbe� [ '`_ hf 7H

e �J �� Ñ ��������� � �� ���3 � � � ���� �� � � �� �������� � �� ����� �� � ��� Í��� ���� �� ��� �� �������� �� � ��� Í��� ���� � �����

�� � ���� �� �� ������� � � ��� ������ � ���� (��� & ��� � �� ��� �� � ���� ���� $ ����� �� Í��� ����� � � (��� ����� � ���� ��� � ���� � ���� ��� �� �� $ 3 � �� � � ���� �� Í��� ���� �� ��� � ����� � � ��� � 2 ��� ������� � ���� (��� ������ � � � ������� ��� �� ��� � ���� �� � ��� ��� ��� �� $ *�,� �� �Z� Ä �Ä >?����� �� �� � ���W�� � ����� ������ �� �� �Z� /�Ä- D ������ � �� � ������� ���� �� ��� � ������� (���� ������� �� � ��� ������ � ��� ������ � � � �� �� �� � ����� � ����� $ *� ���� ���� ���� ������� ���� ����� �� ���� 2 (��� ������ �� � � � ������ � � ��Z� ���� �� � ����� �� � ��� �� � ��� ���� �� $

K� � �� �� ����� 2 ��� W�� �� � ��;�� ���;�� �� �� ��� ���� �� ��� � ������ � ��� �� � ���� ������ ��� �� � ���� 2 � �������� � �� �����)� ��� �� �� $ ����� �� ��� ���� � ����� ������ ��� ����� ����� � � ��� �������� �� �� Q � GL �W V OR��� � O��� V ���� I $ K� � � ���� ���� � �� ����� � �� ���� ���������� � �� ��� �������� � �� O��� V ���� $ ��� �)� ��� � � �� �� �� ����� a���� 4 �� a��� � � � ������ �� � �� a��� � � � �� ������ ��� �� �����)� �� �� a��� � � � �������� � ��� ��� ���� �� ��� � $ ������������ ��� ��� ��� ����� ���� � � � �� ����� � a��� �� ������ ��� �� � a��� � ��� ��� ����� �� ��� � $

�ñ [ýï� ôûðýñ÷ øö ûDó ö øôñ÷ õö÷ �ôõö2ï÷x ���� � � ��� � ������� � |��� �} � � � �� � ��� � ��� �� $ ����� �� Í��� ���� �� ��� � ���� (��� ����)

��� ��� ����� �� 2 ����� � � ����� � �� � ��� � ��� �� $ % �� ���� �;�� � ����� ����� ��� � �������� � ��� ��� � ��� � $ M� � ��Z� � �� ���� ��� � � � ���� � � �� � �� ���� � � � ���� ���� � ������� ��� $ K� � � Q �L �W V OR��� �� � � � (��� ������ � � �� � � � � O��� V ���� �� ��� �� � ��� ��� � � �� �� �w�� ���� ���������� ���� � � ��� (��� � ���� � ��� � ����� �� ������ ��� $

% �� ��� ���� ��� �� �������� ���� �� ��� ���� �� ��� � 2 � �������� � �� � ��� � ��� ��� $ K� � ����� ����� �� ����� � �� ���� �� � � � ������� �� ����� ������ � �� �� � � � ���� �� ��� ��� � � ��� (����� ����� �� ���� �� 2 � � �� � �� ���� $ K� � ����� � ���� ����� ����� ��� � �� ��� � � ��� ��� �� ���� �������� � ���� ��� ������ � $ ��� ������� �� � ��������� � � � � L �W V OR��� � � �� �� � �� � � �� ��� ��� �Z� G� � � � ����� ��� �I � � � � O��� V ���� $

x ���� ���� ��� ���� � � ������� � �� ��� �������� � �� O��� V ���� �� �� ��� ��� � ���� � � � ������ �� �� ������� �� ��� ������� ����� ���� �� ��� �� �� ���� �� ��� �� $ ÿ� �� ���� |a��� � ������}� ����� �� ��� �� $

üûýó Ò �ýóD öñ óõôòöM ��������� � O��� V ���� � � �� � ���������� �������� � ������ ��� ��� ��� �� � � 6" ���� � �� ����)

� ��� �� � ��� ��� ��� ��� �� ���� � ������ ��� �� � ��� �� :8 ���� $ ÿ� ������� � � (� � ��� ���� ����� �� � � � ��� � ����� 2 � ��� � �� ���� �� :8 � �� 6" ���� $

��� �������� � � ��� �� ��� ��� �� �� � ����� � �� ���� G�.BC �AD- .0�I �� ������� � ����� Gm?D- B.0�Ä �@/AD- .0�I �� � �� �������� ��� �� Í��� ����� �� � ����� GÄ ?��>�AD- .0�I $ M ��� Í��� ���� �� ����� � � � �� ���� �� �� �.BC �AD- .0� ��� ������� ��� Ä ?��>�AD- .0� � (� � �� ���� ��� $

M ,� �� " $" ���������� � �� ��� ��� ���� � � �� ��� �� $ M��vi

������������ � ��� � � � �� ��� �� �t1

�.BC�AD- .0� ÓÔÕ ÓÖÕv1 v2

m?D- B.0�Ä �@/AD- .0� × ¹º ××Óp1 p2

Ä ?��>�AD- .0� ØÙÚÛt1

¸¹º » " $" 5 *���� ��� ��� �� � �� ������ ��� �� � ������

Page 99: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

H9 [\ ] ^_ `a b ­ d bf k_a hf f bi bf `g )b )� kb j h^^bi bf `

��� �� ��� ���� �� ��� � ��� ��� �� ���pi

�� ������ ��� ��� ��� ��� �+ �� � �� �� Q � $ M� � �� � �� ����x JQ G ²1 ��� =>I ��� ������ � � � ������� � Í � �� ������ �� � ��� �� �� �� � �� � �� ���� xx � G ²1?01²?B B �>Ä �I ����� � ������� �� � ��� �� ������ $

��� �������� � ��� ��� � � �� � ��� ��� �� $ M�� �� � ���� �;��� ��� �� ������ ����� � ����� ��� ��� ����� � ��� �� �w ����� ���� ���� $ ����� �� Í��� ���� ��� �������� ��� � ����� m?D- B.0�Ä �@/AD- .0�$ M ������;� ���� � � �� 2 � � � ��� � ����� �� ����� � ��� ��� ��� ��� �� Í������ �� �� � Í � � ������ ��� $ ��� �� ������������� ������ ������� ��;� �� ������ ��� $ M �����;�� ��� � �+ �� � �� ������ ��� ��� ��� ��� �� �� �� ��� Í��� ���� �� ��� �� $ J� � ����� � �� ������ ��� 4 ������ ��� ��� ��� � � �� ��� �� ���� � �� ���� �������� � ������ ��� � � �� ��� � �� ������� �{��� � ������ ��� � � �� ��� � �� �� ���� $

M ��������� � ��� �������� ��� � ������� ����� ���� � �w ��� ����� Ä ?��>�AD- .0� �� m?D- B.0�Ä �@/AD- .0� ������ Í��� � �� � � 2 � ,� �� " $! $ 3 �� ����� ���� �� �� ������� ���� �� ��� �� ���� �� � �� ��� � ����� ��

�.BC �AD- .0� ÓÔÕ ÓÖÕÄ ?��>�AD- .0� × ¹ºt1 ××Ó

¸¹º » " $! 5 U �������� ��� �� � ����� �� ������ ��� �� �� � ����� ��� ��� ��

�� ���� � ��� Í��� ���� �� ��� �� G��� �� �� � �Í�I �� � ��� Í��� ���� �� ������ ��� � � � � ����� � ��� ��� (� � ��� �� G�� �� � � ���I �� � ����� Ä ?��>�AD- .0�$

e �J �J Ü�� �� ��� � ��� ��� �� ��� �M�� �� �� × ¹º �� ××Ó �� � ��� Í��� ���� �� ��� � ���� ������� � � � � ��������� � Q � $ M ����� ��������

�� � Q � ��� �� � ��� �� � ��� ����� �� ��� ��� �� �.BC�AD- .0� ���� �.BC �AD- .0� �� �� �� � ��� ��� ����� �� × ¹º �� ××Ó $

ÿ� �������� �� �������� � ��� � - D�Cm>A� �� �� �������� � � � � ���� ���� ��� $ ÿ� ����� �� ������ �� L M �� �� � �� � ���� 4

ÖÐÔ Ö Ñ /Ý Ý'ÝÏ Ý'Ý� Ý0 ''ÖÐÔ ä Ñ Ú äÔÏØ á /Ýä Ý0 � Ö åÉ ÙÔØ � ×� á ÑËÔ � � ËÓ� � å ''

y� � � �� ��� � � �� ��� � �� � ������ ��� �� �� � � �� ����� �� �� ��� �� � � � � ���� ������� ���� � ������ $ M� ��� ��� � � � �� � ����������� � ��� �� ��� ���� $ �����)� ��� ��������� �� � � ������ � ���� � � � ���� �;�� � ���� �� � ���� �� � � � (��� �� � ���� $ *� ������� �� �� �������� ���� ��;����� ������ G ������� ��N� ����� ���� �� �I � �� �� ������� ��� ��� � ��� ������� 2 � ,� �� " $6 $ M� ��� �)� (� � ��� ���������� 2 � ,� �� " $F $ ÿ� � � � ����� � � � ����� Ä ?��>�AD- .0� �� ������� � � ��� ��� �� �����

pi����� �� ��� �� � ����� � � � $ ��� ���� ������ ��� � �� �� Q � ���� ��� $

³ �� � ��� � �� ����� � ��� ��� ��)��� �� �� � ����� � ���� � �� $ ÿ� � �� ��� � ��� � �� ������ ��)���� �Z�� ����� ��� �� �� � ������ �� � ����� �� G���� ���� ��� � ��� � � ���� ��� �� ��� � ������ �����I $

z Þ Þ��@@

� Þ� Þ-

° Þ Þ-

± Þ� Þ��@@

����

HHHj

²HHHY

���*

¸ ¹º » " $6 5 % �� ��� � �� �

Page 100: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

­ d8 d `É^b g Ê j Ëbe� [ '`_ hf H E

�ôõö2ï {

� ðïïý ðï {

1︷ ︸︸ ︷Þ Þ ü

2︷ ︸︸ ︷Þ� Þ �

3︷ ︸︸ ︷Þ Þ �

4︷ ︸︸ ︷Þ� Þ ü

5︷ ︸︸ ︷� ß

6︷ ︸︸ ︷� ß

àáâã àáâã àáâã àáâã äåáæ äåáæ

¸ ¹º » " $F 5 çèéè êë èéì éíéîè ïðñòóôîè õôì íéöóé÷õôì /Ë ôè �Ë øòööôìù òîêéîè éëú ôìùéøôì �ûüý �þÿ�û�� ôè Ä �����þÿ� û��� �î îòèô /Ë ��� õé�� ó�� ô øôõõë õô ��` ��� õé ùéöèóô ��` êô õé �� ó�� ô øôõõë õô ��` ��� õé ùéöèóô ��` êô õé �� ó�� ô øôõõë õô � �Þ ��� ôìè õô ù òóîèôëö p1

ôè ��� ��� õô ù òóîèôëö p2êô õé �� ó�� ô øôõõë õô ��é íéöóé÷õô ���� øòööôìù òîê � ëî ùòóîèôëö ìëö õé ùöò ø�éóîô øôõõë õô õó÷öô � ðò�� ô òî ìëùùòìô �ëô ø�é�ëô

íéõôëö ôìè � éö�ë�ô ù òëö êóìøöó� óîôö ëîô íéõôëö ó���êóéèô ê �ëî ùòóîèôëö òî óîèöòêëóè õôì êôëú Íòîøèóòîììëóíéîèôì ��� �!"#$$%"&#% '#$$% ( )�� �!"#$$%"&$% '#$$% ( )

�ôì êôëú ùöô� ó�öôì �èéù ôì øéõøëõôîè õé ù ôö�ëèéèóòî êôì øôõõë õôì � �é Íëèëöô ù òìóèóòî êô ø�éøëîô ôìè ìéëí�ôêéîì õô ø�é�ùì � �Þ øòööôìù òîêéîè ôè õ �éêöôììô êô õé øôõõë õô � íôîóö êéîì õô ø�é�ùì ��� � ðôõé ôìè ö�éõóì� ùéöõé Íòîøèóòî ìëóíéîèô �*+�$ ,%-# '#$$% # ( .�/ ' 0 12 3#4 55 6788 ( .0 12 3#4 5 /%-- ) 009 3/%--4 5 # )/%--:: );;

a︷ ︸︸ ︷

b=free︷ ︸︸ ︷

a︷ ︸︸ ︷

free︷ ︸︸ ︷

<v1 v2

ã=ä > ?<w1 w2

ã=ä > @A <v1 v2

ã=ä > ?< åw1 w2

ã=ä > @<B B

BBBBBBC DE F G �H I Jùù ôõ êô Köôéè LéM

çèéù ô NM Köéóèô� ôîè êô õ �ôîìô�÷õô êôì öéøóîôì L`OM �/%--5 P )/+% '�5 P )�QR-�S T 'UV( )�:: ( ,%-# 'UV 3�4 ( )

WXYZ[ {

\]^^_^ {

1︷ ︸︸ ︷Þé Þ ` 2

︷ ︸︸ ︷Þ÷ Þ a 3︷ ︸︸ ︷Þø Þ b 4

︷ ︸︸ ︷Þê Þ ` 5︷ ︸︸ ︷c ß

6︷ ︸︸ ︷c ß

àáâã àáâã àáâã àáâã äåáæ äåáæd e N f

C DE F G �g I Kéì éùö�ì õ ��èéù ô Nçèéù ô fM Köéóèô� ôîè êô � �h ôè ��� ù òëö ø�é�ëô øôõõë õô ê�ùõéø�ô i øò�ùöóì øôõõôì ê�ùõéø�ôì � õ ��èéù ô f �

Page 101: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

gf jklmnopq ­ r qs tnpussqvqs ow xq xy tqzummqvqs o

/+% ' {T5 P ) {T Q /%-- ) {T:: ( .#$$% # 5 009 3{T4 )�/ '�!"#$$%"&#% '# (( ,%-# '9|U 3#4 ( )�/ '�!"#$$%"&$% '# (( ,%-# '9}U 3#4 ( );

WXYZ[ {

\]^^_^ {

1︷ ︸︸ ︷Þé Þ ` 2

︷ ︸︸ ︷Þ÷ Þ a 3︷ ︸︸ ︷Þø Þ b 4

︷ ︸︸ ︷Þê Þ ` 5︷ ︸︸ ︷c ß

6︷ ︸︸ ︷c ß

àáâã àáâã àáâã àáâã äåáæ äåáæG d ~ e N G d N f f

C DE F G �N� I Kéì éùö�ì õ ��èéù ô fçèéù ô dM � óìô � � òëö êôì ù òóîèôëöì �

/+% '�5 P )�QR-�S T 'UV( )�:: ( UV 3�450 12 3UV 3�44 )/+% ' {T5 P ) {T Q /%-- ) {T:: ( .#$$% # 5 009 3{T4 )�/ '�!"#$$%"&#% '# (( 9|U 3#4 5 012 39|U 3#44�/ '�!"#$$%"&$% '# (( 9}U 3#4 5 012 39}U 3#44;

WXYZ[ {

\]^^_^ {

1︷ ︸︸ ︷Þé Þ ` 2

︷ ︸︸ ︷Þ÷ Þ c3

︷ ︸︸ ︷Þø Þ a 4︷ ︸︸ ︷Þê Þ ` 5

︷ ︸︸ ︷b � 6︷ ︸︸ ︷b �

àáâã àáâã àáâã àáâã äåáæ äåáæG d ~ e N G d N f f

C DE F G �NN I Kéì éùö�ì õ ��èéù ô dçèéù ô G M �õ ôìè èô�ùì ê �ô� ôøèëôö õôì ê�ùõéøô� ôîèì � ùòëö øôõé òî é ÷ ôìòóî êô êôëú �òîøèóòîì éëúóõóéóöôì ù òëöê�ùõéøôö ëîô øôõõë õô ôè ëî ôîìô�÷õô êô øôõõë õôì ø�é�î�ôì �*+�$ � +*- '#$$% !%& � #$$% $-! ( .�V 3$-! 4 5 �V 3!%&4 )�V 3$-! 4 �� ��- 5 �V 3!%&4 �� ��- )009 3$-! 4 5 6788 )012 3!%&4 5 6788 );*+�$ � +*-"&T#�� '#$$% #( .{T �R- '# �5 6788 ( .#$$% � 5 009 3#4 )� +*- '� �# ( )# 5 � );;

J õòöì õ �éõ�òöóè�� ô ëèóõóì� ùòëö ê�ùõéøôö õôì øôõõë õôì ôìè õô ìëóíéîè �

Page 102: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r� r o�mqw � z �q�y j�onus gd

/+% ' {T5 P ) {T Q /%-- ) {T:: ( .#$$% # 5 009 3{T4 )�/ '# �5 6788 ( .�� # %-! - -� � R#&- ���/ '0 12 3{T4 55 # ( .012 3{T4 5 6788 )009 3{T4 5 6788 );-R!-�� � +�*-� -� !��� R- ���/ '0 12 3{T4556788 ( � +*- '# �{T ( )-R!- .#$$% � 5 0 12 3#4 ){T �R- ' � �5# �� 0 12 3�4 �56788 (�50 12 3�4 )�� � +�*-� -� $ ���- R�! - &T#�� - ���/ '0 12 3�4556788 (� +*-"&T#�� '0 12 3�4 (�� � +�*-� -� &�%&�R#�%- ��-R!- .� +*- '# ���//-% ( )� +*-"&T#�� '# ( )� +*- '��//-% �0 12 3#4 ( );;;;¡òëö õôì ê�ùõéøô� ôîèì êô ìèöëøèëöôì øóöøëõéóöôì øô èöéóèô� ôîè ôìè ìë¢ ìéîè � �ôì ìôëõì øiøõôì ù òììó÷ õôì ìòîèøôëú øòîøôöîéîè õé ùöô� ó�öô øôõõë õô Lõé íéöóé÷õô £ êéîì õì ùìôëêò øòêôM � ñó ø ��èéóè õô øéì ëîô øôõõë õô ù òëööéóèéíòóö êôëú êôìèóîéèóòîì � ¤ è øôõé îô ù ôëè ùéì éööóíôö � ¥ éîì îòèöô ôúô�ùõô òî ê�èôøèô ëî øiøõô ù ôîêéîè õô

èöéóèô� ôîè êô õé ùöô� ó�öô øôõõë õô � 1 ← 3 ← 4 ← 1 éëììó õé íéöóé÷õô ¦§���� ôìè ëèóõóì�ô ù òëö ìéëíôöõô øòîèôîë êô õé øôõõë õô 3 ôè õôì øôõõë õôì ìòîè ê�ùõéø�ôì � Jùö�ì øô � òëíô� ôîè òî èöéóèô õé øôõõë õô 2�ëó ù ôëè

éõòöì ÷ òë�ôö íôöì õé øôõõë õô õó÷öô 5� ¨ õé ©î õé øôõõë õô 6

ôìè ÷ òë��ô íôöì õé øôõõë õô 2� �ô ö�ìëõèéè øòööôìù òîêéëú ©�ëöôì G �Nf ôè G �Nd �

WXYZ[ {

\]^^_^ {

1︷ ︸︸ ︷ªø ª a 2

︷ ︸︸ ︷b � 3︷ ︸︸ ︷ªê ª ` 4

︷ ︸︸ ︷ªé ª ` 5︷ ︸︸ ︷ª÷ ª c

6︷ ︸︸ ︷b �

«¬­® ¯°¬± «¬­® «¬­® «¬­® ¯°¬±

C DE F G �Nf I Kéì éùö�ì õ ��èéù ô G¥ éîì õô ÷ëè êô ìó�ùõó©ôö õé ùö�ìôîèéèóòî îòëì î �éíòîì ëèóõóì� ëîó�ëô� ôîè êôì ò÷ � ôèì êô èéóõõô êôëú � ¡òëöôîèöôö êéîì õô øéì ��î�öéõ óõ ôìè î�øôììéóöô ê �óè�öôö õôì êôëú ùöô� ó�öôì �èéù ôì ù òëö èòëèôì õôì øôõõë õôì � òóîèôìê �ëîô �²� ô íéõôëö � �î ù ôëè � éö�ëôö øôì øôõõë õôì � òóîèôì ôî ö�ìôöíéîè ëî ÷óè ê �óî �òö� éèóòî êô èiù ô ù òëöóîêó�ëôö �ëô õé øôõõë õô øòëöéîèô ôìè ëîô ùéöèóô ê �ëîô íéõôëö êòîè õé øôõõë õô ìëóíéîèô �éóè ùéöèóô � J óîìó �ëéîê

êôëú øôõõë õôì ìòîè � òóîèôì òî �éöéîèóè �ëô õôëöì îòëíôõõôì ù òìóèóòîì ìôöòîè ê�èôö� óî�ôì ìëøøôììóíô� ôîè ôè�ë �ôõõôì öôìèôöòîè øòîèó�ë³ì � �î ù ôëè öô� éö�ëôö �ëô õ ��èéù ô êô ê�ùõéøô� ôîè ôìè øò�ùõ�èô� ôîè óîê�ù ôîêéîèôêô õé îéèëöô êôì íéõôëöì ê�ùõéø�ôì � �ôì êôëú ùöô� ó�öôì �èéù ôì îô � òêó©ôîè ùéì õôì êòîî�ôì � � ��èéù ô èöòóìù ôëè ²èöô óîíôöì�ô � èòëè � ò� ôîè � ¤ è éíéîè �ëô õ ��èéù ô �ëéèöô îô ê�� éööô óõ ôìè ù òììó÷ õô ê �óîèôööò�ùöô õôïð �

ðôè éõ�òöóè�� ô î �éëèòöóìô ùéì êô ö���öôîøôì � õ �óîè�öóôëö ê �ëîô êòîî�ô � ¡òëö éëèòöóìôö êô èôõì ù òóîèôëöì óõ

Page 103: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

gG jklmnopq � r qs tnpussqvqs ow xq xy tqzummqvqs o

´ ªé ª��@@ µ ª÷ ª -

¶ ªø ª -· ªê ª

��@@

¸����

HHHj

CDE F G �Nd I ¹éõôëö ðé� õ ìëöíóíéîèô

�éëè � òêó©ôö õôì êôëú ùöô� ó�öôì ùéììôì �º[^»_^\X¼½[¾

Jíéîè ê �éõõôö ùõëì õòóî òî ø�ôöø�ô � �íéõëôö õôì öóì�ëôì êô ù ôöèô êô ù ôö�òö� éîøô êô îòèöô éõ�òöóè�� ô ��é ©�ëöô G �NG øò�ùéöô øôõë ó øó Løòõòîîô ¿ôî ùõéøôÀM éíôø ëî ñèòù Á ðòùi øõéììó�ëô Løòõòîîô ñð M ìëö ëîùöò�öé�� ô êô � éîóùëõéèóòî êô õóìèôì � øòîìèöëøèóòî êô õé õóìèô êôì îò�÷öôì ùöô� óôöì ôî ëèóõóìéîè õô øöó÷ õôê �¤ öéè�òìèôîô � ðôì èô�ùì ìòîè êòîî�ì ìëö ëî ñ¡JÂð N� � �õ i é êôëú íôöìóòîì êô õ �éõ�òöóè�� ô � ¤ öé N ôè ¤ öéf�ëó òùèó� óìô õ �ôîìô�÷õô êôì öéøóîôì éëììó õô èéì ôìè ùõëì ù ôèóè éùö�ì ïð �

¤ öé N�ôéù ìóÃô ïð î÷ ñð ôî ùõéøôN���� Hd� NH �~ ì fG �H ìN����� ee NÄ �N ì Ng �g ìN������ e NH �� ì f� �G ì¤ öé f

N���� H� g �G ì g �Ä ìN����� Ä g �~ ì g �H ìN������ � N� �� ì N� �g ìCDE F G �NG I Kôìèì êô ÷éìô

�ôì èô�ùì øòööôìù òîêôîè éë øéõøëõ øò�ùõôè �ëó óîøõëè õô èô�ùì êë ïð � �ô ñèòù Á ðòùi øõéììó�ëô îô� éîóùëõô ùéì õôì èiù ôì ôè ôìè õ���öô� ôîè ùõëì öéùóêô � �ô ùóöô êôì øéì éööóíô � õé ùöô� ó�öô õó�îô L©�ëöô G �NG M ��é ù ôèóèô èéóõõô êë èéì ôîèöé�îô ëî îò�÷öô ó�ù òöèéîè êô ïð õô ùöóú � ùéiôö ôìè êô êôíòóö ê�ùõéøôö ùõëììòëíôîè õôì øôõõë õôì ìëöíóíéîèôì � ¥ éîì øô øéì õ �éõ�òöóè�� ô ¿ôî ùõéøôÀ ôìè ôîíóöòî ìôîìó÷ õô� ôîè ùõëì õôîè �ëôõô ñèòù Á ðòùi øõéììó�ëô �� �éë�� ôîèéèóòî ��� òóöô ôìè öéóìòîîé÷õô � �é èéóõõô êô õé ùóõô öôìèô õé �²� ô � �é èéóõõô êë èéì �öòììóè ìôëõô� ôîèù òëö õôì ìèöëøèëöôì ê �ëî îò�÷öô ó�ùéóö êô øôõõë õôì � ¥ éîì õô ùóöô êôì øéì ìó èòëèôì õôì ìèöëøèëöôì òîè ÷ ôìòóîêô èöòóì � òèì ��� òóöô éõòöì õé ù ôöèô ì ��õ�íô � f~Å êë èéì �

ðô øéì ôìè öéöô êéîì õé � ôìëöô òÆ ëî ùöò�öé�� ô �� éõõòëô êôì íéõôëöì êô èéóõõô êó��öôîèô øò�� ô õôìî ëùõôèì òë õôì �ôö� ôèëöôì � ðô èiù ô êô ïð ùôö� ôè ê �òùèó� óìôö õé öôùö�ìôîèéèóòî êôì êòîî�ôì êéîì õô èéì � ¡éöôúô�ùõô ëî îò�÷öô � íóö�ëõô Çòèèéîèô LÈɧ¦Ê�M ù ôëè ²èöô ìèòøË� ìëö êôëú � òèì ìéîì � éö�ëô êéîì ìé íéõôëö �¥ ô ùõëì õ �éõó�îô� ôîè eG ÷óèì ôìè �ö��ëô�� ôîè ëèóõóì� ôè êéîì øô øéì óõ î �i é ùéì øô ù ôöèô ê �ôìùéøô �

�õ ìô�÷õô ù òììó÷ õô ê �ëèóõóìôö øôè éõ�òöóè�� ô ù òëö êôì ïð � ��î�öéèóòîì òë ù òëö êôì ïð � óú éîè êôì éõ �òöóè�� ôì � éöË Á ñ�ôôù ôè ñèòù Á ðòùi � � �ôìùéøô êô èiù ôì ù ôëè ²èöô ëèóõóì� ù òëö ìéëíôö õôì îë��öòì êô��î�öéèóòîì êôì øôõõë õôì �ëó ìëöíóíô � ëî ïð �Ì ÍÎ ÍÌ ÏÐÑÒÓÔÕÖ×ÑÕØÒÓ ÙÐ ÕÚÛÐÔ

Ü óôî �ë �éiéîè ëîô óî �òö� éèóòî êô èiù ô ù òëö ø�é�ëô íéõôëö õô ùöò÷õ�� ô ôìè � éóîèôîéîè êô öôøòîìèöëóöô õôëöèiù ô êëöéîè õ �ôú�øëèóòî � ¡òëö øôõé òî ùöòù òìô êó��öôîèôì öôøòîìèöëøèóòîì êô èiù ô ôî �òîøèóòî êô õ �ëìé�ô �ëó ôî

Page 104: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r� r o�mqw � z �q�y j�onus g~

ìôöé �éóè � �î ùö�ìôîèô èòëè ê �é÷ òöê õé öôøòîìèöëøèóòî êô èiù ôì ù òëö õôì íéõôëöì ó���êóéèôì ù òëö ì �óîè�öôììôöôîìëóèô éëú íéõôëöì îòî �òîøèóòîîôõõôì ùëóì éëú íéõôëöì �òîøèóòîîôõõôì �ÝXY[Z^¾ ]\\Þß]Xà[¾

�ôì íéõôëöì ó���êóéèôì îô ìòîè ùéì éõõòë�ôì êéîì õô èéì î�éî� òóîì ôõõôì ù ôëíôîè éùùéöé�èöô êéîì êôììèöëøèëöôì éõõòë�ôì � �î ø�ôöø�ô � �éöêôö õé öôùö�ìôîèéèóòî ëîó�òö� ô êôì êòîî�ôì ìéîì é�òëèôö ê �óî �òö� éèóòîìêéîì õé ùóõô �¡òëö êóìèóî�ëôö õôì ù òóîèôëöì êôì íéõôëöì ó���êóéèôì ù ôîêéîè õô ïð òî éêòùèô õô ìòõëèóòî ëìëôõõô ê �ëî÷óè êô � éö�ëô � � éóì õ �òî ê�ìóöô éëììó êóìèóî�ëôö õôì èiù ôì êôì íéõôëöì ó���êóéèôì � ¡éö ôúô�ùõô ôî �� õôì ôîèóôöì õôì øéöéøè�öôì ôè õôì øòîìèöëøèôëöì øòîìèéîèì ìòîè øòê�ì êô õé �²� ô � éîó�öô � ¡òëö øôõé óõ ôìèî�øôììéóöô ê �ëèóõóìôö ùõëì ê �ôìùéøô ù òëö ôîøòêôö õô èiù ô ê �ëîô íéõôëö ó���êóéèô � ¡òëö ìó�ùõó©ôö øô ùöò÷õ�� ô òî îô øòîìôöíô �ëô õôì ôîèóôöì øò�� ô íéõôëöì ó���êóéèôì � èòëèôì õôì éëèöôì íéõôëöì ó���êóéèôì ìôöòîè éõõòë�ôìôè õôëö èiù ô ìôöòîè óîìøöóèì êéîì õ �ôìùéøô � óööòóö � ðôì íéõôëöì ù ôëíôîè ²èöô éõõòë�ôì ëîô �òóì ù òëö èòëèôì ìó õôîò�÷öô êô íéõôëöì ù òììó÷ õôì ê �ëî èiù ô ôìè ù ôèóè øò�� ô ù òëö õôì øòîìèöëøèôëöì òë õôì øéöéøè�öôì �Jë ©îéõ òî ò÷èóôîè L�éøóõô� ôîèM õôì èiù ôì êôì íéõôëöì ó���êóéèôì L�áâá õôì ôîèóôöìM ìéîì ëèóõóìôö ëîô óî �òö � éèóòî êéîì õé ùóõô �ÝXY[Z^¾ XYY_ZÞ[¾ ¼_¼ »_¼½à]_¼¼[YY[¾

¡òëö õôì èiù ôì � òîò� òöù�ôì Lìéîì ùéöé��èöô êô èiù ôM õ �óî �òö� éèóòî êë èiù ô � õò÷éõ ôìè ìòî èiù ô � � éóìù òëö õôì ê�øõéöéèóòîì êô èiù ôì ùéöé��èö�ì óõ ôìè î�øôììéóöô êô öôèöòëíôö ìôì ùéöé��èöôì êô èiù ô �

¡òëö ø�é�ëô èiù ô òî ê�©îóè ëîô �òîøèóòî ��î�öó�ëô ãäå�æÉ�æç£Ê �ëó øéõøëõô õô èiù ô � õ �ôú�øëèóòî ê �ëîôíéõôëö � ùéöèóö êô ìòî èiù ô � õò÷éõ � �ô øéì � òîò� òöù�ô ôìè ó���êóéè � ¡òëö ø�é�ëô èiù ô ùéöé��èö� òî ê�©îóè� õé øò�ùóõéèóòî ëîô �òîøèóòî ìù �øóéõóì�ô êô öôøòîìèöëøèóòî ù òëö øô èiù ô �

¡éö ôúô�ùõô ìó òî ê�øõéöô õô èiù ô ìëóíéîè � èéêëìíìîïðñ èò îóôò ��- '�# ��� ( õ 5 ö +/ �# ÷ 7 +/ �� � �# ))

øõòöù òú û�©ú óü õø �ýúøüþýú ûÿ öÿøýúùüö�øüþýú øùùýøþ�ÿ � �ðñêîïðñ èò íòêðñ�îí�êîïðñR- �� �R$" ��-"õ � 5 � # &T � { � Tö � �� ' ��-"+/"*#R � � ��$-/ ( ��-"õ÷ 7 '� �* ( �� ' ��-"+/"*#R � � ��-"+/"*#R * ( ��-"õ ))ýÆ ãäå�æ� ÿùü �ÿ üiù ÿ � �ý÷ø� ûÿ � ÿü §�È�� þúûþ��ÿ �ú ùø�ø� �ü�ÿ ûÿ üiù ÿ úýú û�üÿ��þú� � �ø �ýúøüþýú

ù�þúøþùø�ÿ ãäå�æÉ�æç£Ê �ÿüý��úÿ �ÿ üiù ÿ øý�ù �ÿü û ��ú üiù ÿ � ýúý� ý�ù�ÿ ÿü û�����ÿ øÿ øø�ø�� � �úÿ �ýúøüþýúùù �øþø�þù�ÿ ��øúû ÿ��ÿ �ÿúøýúü�ÿ �ú üiù ÿ ùø�ø� �ü�� �ý��ÿ �ø �ÿýúùü��üþýú û ��ú üi� ÿ � ÿ�ü ýúüÿúþ� ûÿù üi� ÿù þúû�©úþù L§�È��M �ÿ ��ù��üøü ûÿ ãäå�æÉ�æç£Ê� ÿ�ü ²ü�ÿ þ����þù �ø� �ø�� ý�ü ø� üi� ÿ øüüÿúû� û ��úÿ �ø�ÿ�� � �øú� ýþúù ÿüüÿ �ÿýúùü��üþýú � ÿ�ü ²ü�ÿ�üþ�þù�ÿ � ý�� ÿ���ý�ÿ� ý� ø¢ �ÿ� ûÿù �ø�ÿ��ù ���ÿ � ÿüüÿ �ÿýúùü��üþýú �ø�üþÿ��ÿ � ¡ý�� �ÿù üi� ÿù ����ùþ�ùþ� �ø�ü �ø�øúüþ� ��ÿ ÿüüÿ ÿ���ý�øüþýú úÿ � ý��ÿ �øù � �þ ýú û��ø�ÿ �ÿ üi� ÿ � ÿü �ø �ø�ÿ�� � ûÿ �ø � øúþ��ÿù� þ�øúüÿ ýú ý�üþÿúü �úÿ �ø�ÿ�� þ���øþ�ÿ � îóôò íéê�í�ï� ��- �# � 5 � +/ �# � ))R- %-& � 5 � � ))

¡ý�� �� þüÿ� û �ÿ���ý�ÿ� þúû�©úþ� ÿúü � �ø��ý�þü�� ÿ ��ý� ýù� ûýþü ýúúø�ü�ÿ �ÿù ÿ��� �ÿù ÿ���ý��ÿù ùýþü ÿú � ø� ��øúü �ÿ�� � ýþúüÿ�� ùýþü ÿú ýúùü�� þùøúü �úÿ �þùüÿ û �øùùý þøüþýú Lý� üø��ÿ ûÿ �ø�ø�ÿM �ÿüüÿ �ýúüþýú ûÿ �ÿýúùü��üþýú ûÿ üi� ÿù ú �ÿ���ý�ÿ �øù �ÿù �ø�ÿ��ù �ýúüþýúúÿ��ÿù ÿü úÿ û�üÿüÿ �øù �ÿù�ø�þø��ÿù ûÿ üi� ÿ �øþ��ÿù � � øþù þ� ÿùü û�� � � ýùùþ��ÿ û �ø¢ �ÿ� � �ÿú� þ�ýúúÿ� ÿúü û ��úÿ �ÿ��ÿü��ÿ � ¤ú ��ù��� ýú�ø�ûÿ �ø ü�øÿ û� �øùù� ýú ÿ���ý�ÿ �ÿ ���ùÿúü � øþù ýú úÿ � ÿ�ü �øù þú���ÿ� �ÿ ��ü�� � �ÿùü � ûþ�ÿ ýú úÿ � ÿ�ü�øù ø�� �ÿ� �ÿ üi� ÿ ���þù ûÿ �ø�ÿ��ù �ýúüþýúúÿ��ÿù �

Page 105: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

ge jklmnopq � r qs tnpussqvqs ow xq xy tqzummqvqs oÝXY[Z^¾ »_¼½à]_¼¼[YY[¾

¡ý�� �ÿýúùü�� þ�ÿ �ú üi� ÿ �ýúüþýúúÿ� þ� ûÿ� þÿúü ú�ÿùùøþ�ÿ û �ø� ý�üÿ� �úÿ þú�ý��øüþýú ù�� �ÿ üi�ø�ÿ ùüøüþ��ÿ� ý�� üý�üÿù �ÿù λ ø� ùü�øüþýúù û ��ú ��ý��ø��ÿ � �ú üÿúüÿ ø�ý�ù û ��üþ�þùÿ� ýú� ýþúüÿ� ÿúü � �þú�ý��øüþýú þùù�ÿû� üi�ø�ÿ ø�ÿ �ÿù þú�ý��øüþýúù ûÿ üi� ÿ ÿ�ü�øþüÿù ûÿ � �ÿú� þ�ýúúÿ� ÿúü � ý�� û�üÿ��þúÿ� �ÿ üi� ÿ ûÿù �ø�ÿ��ù�ýúüþýúúÿ��ÿù �ÿúýúü��ÿù û��øúü � �ÿ���üþýú ��ýþü �ÿ ��ý��ø��ÿ ù� þ�øúü � �ñ ò�ò� ôëò �ðñêîïðññòëR- �%+� 5 /�� & �+� � �� /�� & �+� � �� � ))R- S 5 �%+� � ))¥ÿ�� üi� ÿù ùüøüþ��ÿù ùýúü øùùý þ�ù ø�� ûÿ�� ø� ùü�øüþýúù λx

ÿüλy

� �ÿ ��ÿ� þÿ� ÿùü α → β → αÿü �ÿûÿ�� þ�� ÿ

β → tx � ýÆ txÿùü �ÿ üi� ÿ ûÿ

xûøúù � �ÿú� þ�ýúúÿ� ÿúü ûÿ üi�ø�ÿ � ÿ�ø ø�üý�þùÿ ûÿ �ÿýúùü�� þ�ÿ �ÿüi� ÿ û ��úÿ ø���þøüþýú �ø�üþÿ��ÿ ý��ÿ � ùÿ��ÿ� ÿúü � �ø�üþ� û �þú�ý��øüþýúù ûÿ üi� ÿ ûÿ �ø�ÿ��ù ÿ� þùüøúüÿùùøúù ø�ýþ� � ÿùýþú ûÿ ��ý�ø�ÿ� ûiúø� þ��ÿ� ÿúü � �þú�ý��øüþýú ûÿ üi� ÿ ��øúû �úÿ �ýúüþýú ÿùü ø���þ���ÿ � ¥øúùúýü�ÿ ÿ�ÿ���ÿ ýú ý�üþÿúü

β → int� �ø �ø�ÿ�� ûÿ

txÿùü þþ �øþ�ÿ � û�üÿ��þúÿ� � �ø�üþ� ûÿ �ø �ø�ÿ�� ûÿ � ûÿ� �ÿú� þ�ýúúÿ� ÿúü ûÿ �ø �ÿ��ÿü��ÿ � � ¤ú ��� �ÿ ��ú��ø�ÿ �ÿ ø�� � ÿùü ��� ù ý���ÿ�ÿ � ý�� �ø û�üÿ��þúøüþýú û�üi� ÿ û ��úÿ �ÿ��ÿü��ÿ � �ø�üþ� ûÿ ùýú ÿú� þ�ýúúÿ� ÿúü �¥øúù ÿ øù ø� ùùþ �ÿ üi� ÿ �ÿýúùü�� þü � ÿ�ü ²ü�ÿ � ýþúù ���þù ��ÿ ÿ�� þ øüüÿúû� � ÿ�ø ÿùü û �ø�üøúü ��� ù ��øþ ÿú

���ùÿúÿ ûÿ �ø�þø��ÿù ûÿ üi� ÿ �øþ��ÿù � ¤ú �� � ÿüþ�ÿ ø� � � �þú���ÿúÿ ûÿ üi� ÿù úÿ ��ú��ø�þùÿ �øù �ÿù �ø�þø��ÿùûÿ üi� ÿ û �ÿ���ÿùùþýúù â���� !"â þú��øúü � �ø���þøüþýú � ¥øúù � �ÿ�ÿ���ÿ ù� þ�øúü þ� i ø �úÿ ûþ� ��ÿúÿ ÿúü�ÿ�ÿù üi� ÿù ûÿ � ÿü ûÿ �ã � #ìíïì$ ëò� èò îóôò �ìï$ ëò�% R- � #õ-"� � 5 � �� ))� #õ-"� & �# �� �# � �#% R- �$ � 5 � ))�$ & �# �� �#% R- % 5 � #õ-"� �$ ))% & '�"# �� �"# ( � '�"# �� �"# (% R- % 5 �$ ��$ ))% & '�# �� �# ( � '�� �� �� (� øþù ÿù ûÿ�� �ø�ÿ��ù ý��ÿù� ýúûÿúü � ûÿù ø��ýøüþýúù ��� þ�ø�ÿúüÿù ûøúù �ÿ üøù � J� ùùþ úýü�ÿ �ÿýúùü��üþýúûÿ üi� ÿ ü�ý��ÿ�ø �ÿù � ²� ÿù üi� ÿù � ý�� �ÿù ûÿ�� � �ú � ÿ�û �úÿ �ø�üþÿ ûÿ � �� þùüýþ�ÿ û� ø�� � �

' ]\ ]àXà]_¼¾¥øúù ÿüüÿ ��ý� ýùþüþýú ýú úÿ ýúùÿ��ÿ � �þú�ý��øüþýú ûÿ üi� ÿ ûÿ �ø ��øùÿ û �þú���ÿúÿ ùÿ��ÿ� ÿúü � ý�� �ÿùø� ùü�øüþýúù Lÿü ûýú � ý�� �ÿù �ÿ��ÿü��ÿùM � ¡ý�� ÿ�ø ýú � ÿ�ü �ÿýúùü�� þ�ÿ �ú üi� ÿ ýúüÿúøúü ��� ù û �þúýúú�ÿùûÿ üi� ÿ �� �øüüÿúû�ÿù � ¥øúù �ÿ ��ÿ� þÿ� øù ýú ýúùü�� þü ûÿù þúýúú�ÿù ûÿ üi� ÿ �� ýÆ � �ýú ÿù� ��øþü �ú üi� ÿ� ýúý� ý���ÿ � ¥øúù �ÿ ûÿ�� þ�� ÿ øù ýú ýúùü�� þü �ú üi� ÿ ýúüÿúøúü ��� ù û �þúýúú�ÿù ûÿ �ø� �ø � ÿ�üÿ ûÿ

�ø�üø�ÿ ûÿù �ø�þø��ÿù ûÿ üi� ÿ L� ÿ�üÿ �þ�ÿ ø�� üi� ÿù ÿ� ü�øþüù ûÿ � �ÿú� þ�ýúúÿ� ÿúüM � J� ùùþ � ��üþ�þùøüþýú û� üi� ÿ�ÿýúùü�� þü ÿü ûÿ �ø �ø�ÿ�� øùùý þ�ÿ ûýþü ²ü�ÿ �þ� þü�ÿ � ý�� �� þüÿ� ûÿ � �ÿ���ýiÿ� � û �ø�ü�ÿù ©úù ��ÿ ÿ��ÿþú þüþø�ÿ� ÿúü �����ÿ ø� üi�ø�ÿ û� ��ý��ø��ÿ � �ÿùü �úÿ �ÿùü�þüþýú � ý�� �ÿù ý�üþ�ù ûÿ � þùÿ ø� � ýþúü L��øúûýú �ÿ�ü ø���þ��ÿ� �úÿ �ÿ��ÿü��ÿ þúüÿ�øüþ�ÿ� ÿúü � �ú ø����ÿúü ýúùü�� þü � �ø � øþú M ÿü � ý�� �ø � ÿ�ùþùüøúÿûÿù �ø�ÿ��ù � ¥øúù ÿù ûÿ�� øù þ� ÿùü ú�ÿùùøþ�ÿ ûÿ �þ� þüÿ� �ÿ�� � ùø�ÿ � ûÿù üi� ÿù �ÿýúùü�� þü � ýúý� ý���ÿù �( )( *+,-./01+, 2 3,415+,,36 3,7 8 +579:.3

¥ÿ úý���ÿ�� ��ý��ø��ÿ��ù �ø�ûÿúü �ú ùý��ÿúþ� ��� ûÿ � �ÿú� þ�ýúúÿ� ÿúü ûÿ û��ÿ�ý�� ÿ� ÿúü ûÿ K��� ý ¡øùø� � �ø ��þùÿ ÿú � øþú �üøþü �ø� þûÿ � � �þúüÿ�øüþýú ÿúü�ÿ � ��ûþüÿ�� ùü��ü��� ÿü �ø ý�� þ�øüþýú ý� �øü�øÿ û �ÿ���üþýú �üøþÿúü �øþ�ÿ� ÿúü ý�����ÿúùþ��ÿù � ý�� �ÿ û���üøúü � ÿ�üÿù þ� úÿ �ýúüþýúúøþü ��ÿ � ý���úÿ ��øüÿ �ý��ÿ ûÿ û��ÿ�ý�� ÿ� ÿúü ÿü �ø�ø�ü�øþü ��ý�ø��ÿ� ÿúü ø��ø;��ÿ ø� ��ý��ø��ÿ�� û �ø�� ý��û ��� þ � �øú� ýþúù ùýú øû���øüþýú ÿúü�ÿ �ÿù � ÿùýþúù û� ��ý��ø��ÿ�� ÿü �ø üÿ�úý �ý�þÿ ûÿ � ��� ý��ÿ ø �ø�øúüþ ùýú

Page 106: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r� r jus jz �wnus < qs tnpussqvqs o m upol=zq gÄ

ù��ù ��ú ûÿ� øúûÿ ��� ù ûÿ �ýùÿù ø�� ý��û ��� þ � �ú ÿú� þ�ýúúÿ� ÿúü ûÿ û��ÿ�ý�� ÿ� ÿúü üý�ü ÿú û�ùþ�øúü �úÿ ��þùÿÿú � øþú �ø� þûÿ � ¡ý�� �ÿ �øú�ø�ÿ J�� þ� �ÿ �ø�øþü ú�ÿùùøþ�ÿ û �ÿ�ÿü�ÿ� ûÿù �þÿúù ÿúü�ÿ �ú �ûþüÿ�� ùü��ü���ÿü û ��úÿ �ø�ü �ÿ ý�� þ�øüÿ�� � ý�� �ÿ üi�ø�ÿ ÿü û �ø�ü�ÿ �ø�ü ø�ÿ �ú ý�üþ� ûÿ � þùÿ ø� � ýþúü � � �ÿ���üþýú �� �þú�ý��øüþýú ù�� �ÿù üi� ÿù ûýþü ²ü�ÿ � üý�ü � ý� ÿúü øÿùùþ��ÿ i ý���þù � ý�� �ÿù û��ø�øüþýúù �ý ø�ÿù � �øúý��ÿ��ÿ ûþùü�þ��üþýú û ��� � ÿüþ�ÿ ø� � � ÿ��ÿü û �ø¢ �ÿ� � �ø���ÿ ûÿ ùiúüø�ÿ üi� � û ��ú ��ý��ø��ÿ Lý�üþýú>Èãäå�? û� ý�� þ�øüÿ��M � ÿ��ÿ þ � ÿ�ü ø�ý�ù ²ü�ÿ �üþ�þù�ÿ ûøúù É@£AÈ� � ý�� �úÿ úø� þ�øüþýú üi� �ÿ ûøúù� ��ûþüÿ�� ��ø �ÿýúùü��üþýú ûiúø� þ��ÿ ûÿ üi� ÿù � ²� ÿ �ø�üþÿ��ÿ ÿùü �úÿ ��þ��ÿ ÿùùÿúüþÿ��ÿ � � �ÿ���ý�øüþýú ûÿù�ø�ÿ��ù û��øúü � �ÿ���üþýú û ��ú ��ý��ø��ÿ � �øþù ÿ��ÿ ú�ÿùùþüÿ ûÿù � ýûþ©øüþýúù ��ý�ýúûÿù û� ý�� þ�øüÿ��� ý�� �ø �ÿ���ùÿúüøüþýú ûÿù ûýúú�ÿù ÿü �ÿ B � �ø úý��ÿ��ÿ ��øüÿ �ý��ÿ û �ÿ���üþýú � ¤K ø � ÿùýþú û ��úÿü�øúù� þùùþýú ûÿ � �þú�ý��øüþýú ûÿ üi� ÿù ø�� ��ÿ � �ø ý�� þ�øüþýú � ý�� ø� ��þý�ÿ� �ÿ ýûÿ ��ýû� þü üi� � � Cúÿ�ýþÿ þúü��ÿùùøúüÿ ÿùü û �ø¢úÿ� ÿüüÿ þú�ý��øüþýú � ý�� �ø �ÿúû�ÿ �üþ�þùø��ÿ �ø� �ÿù ý�üþ�ù ûÿ � þùÿ ø� � ýþúü ûÿÿüüÿ ��øüÿ �ý��ÿ �¡ø� øþ��ÿ��ù � �ÿ�� ��þÿúÿ É@£AÈ� ø � ýúü�� ��ÿ � �ýú � ý��øþü ýúùü�� þ�ÿ ÿü �üþ�þùÿ� �ú DEF � ý�üø��ÿ � �þ �ÿù� ý�üø�ÿù ûÿ �ø ��øüÿ �ý��ÿ � ¤K üþÿúúÿúü �ÿ��ù ��ý� ÿùùÿù ø�ý�ù þ� ÿùü � ýùùþ��ÿ û �þúü���ÿ� ûøúù �ú DEF � �ø

É@£AÈ� �úÿ �ÿ�ùþýú û� ý�� þ�øüÿ�� � �J� þ� ��ýû� þùøúü �ú ýûÿ �� þ þú��ü ûÿù þú�ý��øüþýúù ûÿ üi� ÿù � ý���ÿù ý�üþ�ù ûÿ � þùÿ ø� � ýþúü �

Page 107: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

gH jklmnopq � r qs tnpussqvqs ow xq xy tqzummqvqs o

Page 108: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

G H IJ KLMN O

P Q RS TU Q S V S QW

�ø ûþ¢ ��ü� û �ø���ÿúüþùùø�ÿ ûÿù �øú�ø�ÿù �ýúüþýúúÿ�ù üi� �ù ùüøüþ��ÿ� ÿúü ÿùü �ú ù�� ÿü �����ÿúü ù�� �ÿù�þùüÿù ûÿ ûþ�� ùþýú � �ø ûÿ�úþ��ÿ �ø��ÿ ù�� �ø X�Y Z[Z! \ ûøüÿ û� ��þúüÿ�� ù f��d ÿü ø ��ýû� þü ÿú ��ÿ���ÿù � ý��ù�úÿ ÿúüøþúÿ ûÿ ü�øúùøüþýúù � ¥ÿ ÿù úý���ÿ�� �ÿùùø�ÿù ûÿ�� þüøüþýúù ý�� ýù�ÿù �ÿÇ�üÿúü �ø üÿúÿ�� ûÿùûþù� ùùþýúù � �ø ��ÿ� þ��ÿ ÿùü ÿ�ü�øþüÿ ûÿ ¿¡øüüÿ�úù ý� �ý�ü�ø�ÿÀ¶ ûÿ  þ�ø�û B ø��þÿ� ]ee^ �¿ _` â âXa�b Y ��b�\acd e â�\fcâ ! \`�\ \` â Z��gf�g â X���a\ câhf!câ Y�\` âY�\!X�Z a� `! \!X�\!a�e caY !\ f âc á i cagc�YY âc �câ �a\ Y �\` âY�\!X!�� j �a Y �\\âc `ak YfX` k â k! ` ��b k! ` e ac!\á l�b D ba� m\ Y â�� a� `! \!X�\âb Y �\` âY�\!X!�� j nf \ o f \ � âa� Zâ k`a X�� \`!�p � câX! âZd ��bc!g acaf Zd !� \` â k�d \`�\ Y �\` âY�\!X!�� X�� áqac â� �Y� Zâj \a Y a \ Z��gf�g â \` âac! \ \` â � fc�a â ae \d� â ! \a â��nZâ \` â XaY� !Zâc \a câ� a��naf\ \` â XaccâX\� â ae � � cagc�Y !� �\ Zâ� \ pâZâ\�Z \âcY á rfX` câ� a�!�g X�� � cabfXâ � cag c�Y k!\` �a cf�[\!Y â \d� â âccac á r\c!X\ \d� â d \âY �Za�g k !\` a\` âc â� âY� Z�cd nâ`�"!acj Y acâa"âcjâ��nZâ Xâc\�!� � caae �naf\ � cag c�Y ásâZ Zj \` â �"âc�g â � cagc�YY âc Y !g`\ nâ g c�\âe fZ aY âk` âcâ !� `! ` â�c\ e ac \` â Z�Xp ae cf�[\!Y â\d� â âccac j nf\ �Z Z ` â ac ` â câ�Z Zd X�câ �naf\ ! \`�\ \` â XaY� !Zâc X�� � cabfXâ g aab Xabâj ��b\d� â ` âZ� XaY� !Zâc kc!\âc kc!\â XaY� !Zâc \`�\ ba \`�\áqfc\` âcY acâj \d� â \`�\ \cd \a ba Y acâ \`�� \`�\ �câ � `!�bc��Xâ \a f�bâc \��b!�g á qac â� �Y� Zâj�n \c�X\ b�\� \d� â �Z Zak a� â \a kc!\â � cagc�Y !� k`!X` \` â !� \âce �Xâ ! XaY� Zâ\âZd â��c�\â e caY\` â !Y� ZâY â�\�\!a� á i âc`�� aY â Z�cg â � cagc�YY !�g \â�Y X�câ � Za\ �naf\ \`�\j nf \ � Za\ ae� cag c�YY !�g g aâ a� !� a� â ��b \ka j Y �dnâ \`cââ á _d� â ae \`! "�c!â\dj k !\` XaY� Z!X�\âb d�\�� ��b n�t !�g âY��\!X j ! � ` !�bc��Xâ \a � cagc�YY !�g e ac Y ��d ae \` â â e aZp á rfcâj aY âb�d \` ! k !Z Z nâ !Y�ac\��\ � \` â !u â ae � cag c�YY!�g \â�Y !�Xcâ� â ��b � \` â Zâ"âZ aeY �\` âY�\!X âbfX�\!a� !� Xcâ� â v�a Z�fg` !�g j � Zâ� âw j nf \ \ab�d !\ ! �a\áD�` âc!\�� Xâ ��b �aZdY ac� `! Y �câ â� �Y� Zâ ae � cag c�YY !�g Z��gf�g â Xa�Xâ� \ câhf!c!�g Y �\` â[Y �\!X�Z a� ` ! \!X�\!a� \a f�bâc \��b áÀ

¤ü �ø ûÿ�� þ�� ÿ ÿùü û�ÿ � Âý� þú � þ�úÿ� ����øxøúü ¿K�ÿ �þüü�ÿ ��ÿ�À ]~H ^ �¿ _`! ! � naap �naf\ kc!\!�g � cagc�Y j ��b f�bâc \��b!�g \` âY � daf kc!\â \` âY á y a \ Z�cg âXaY� f\âc � cagc�Y �câ � â"âc XaY� Zâ\âZd f�bâc \aab z !e \` âd k âcâj \` âd kafZb� m\ g a kca�g a ae \â���b k â kafZb nâ �nZâ \a bâ Xc!nâ k`�\ \` âd ba !� � X!â�\!{ X k�d á l gaab Z��gf�g â `afZb ` âZ� \a!Y� ca"â \` ! \�\â ae �| �!c á_` âcâ �câ Y��d k�d ae \cd!�g \a f�bâc \��b � cag c�Y á i âa� Zâ ae \â� câZd \aa YfX` a� a� â k�djk`!X` ! X�Z Zâb }bânfgg !�g ~ ��b Xa� ! \ ae cf��!�g � ��c\Zd[f�bâc \aab � cagc�Y \a ââ !e !\ baâ k`�\ daf â�� âX\âb á l�a\` âc k�dj k`!X` y� �b"aX�\â j ! \a !� \�Z Z aY â Y â�� ae f�bâc \��b!�g!� \` â "âcd � cagc�Y \` âY âZ"â á À

�ôì�ò� ���� ��� è� ê�ìôïîíò ���ò �ñè ð � � ï�îðíó ìñè î�ò �ì�î �íð�íì�� ïñ� �ìñ��ì�ò��gg

Page 109: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

N�� jklmnopq � r qs wqn�sqvqs oý��ÿ þúûþ��� ûøúù � �þúü�ýû�üþýú �ÿù øüüÿúüÿù � þù � � þù û ��ú �øú�ø�ÿ ��ý� þÿúúÿúü ûÿ �ø �ý �ýúü� û �ø� ùü�øþ�ÿ�� þ ûÿ úýü�ÿ � ýþúü ûÿ ��ÿ øþûÿ � �ø ý�����ÿúùþýú ûÿù ��ý��ø��ÿù � �øú� ýþúù � �ø����ÿúüøþ�ÿ ûÿ Bø��þÿ�ú �ÿùü �øù � ùý� ù ÿùüþ� ÿ� ûøúù �ø � ÿù��ÿ ýÆ � �ÿúùÿþ�úÿ� ÿúü ûÿ �ø ��ý��ø�� øüþýú þú��øúü �ÿù �øú�ø�ÿù�ýúüþýúúÿ�ù Lüi� �ù ùüøüþ��ÿ� ÿúüM �ÿ�ü ù �øû�ÿùùÿ� ø� ��� ù ��øúû úý���ÿ � � �ø���ý �ÿ ûÿ � þ�úÿ� ÿùü � þÿú

øûø�ü�ÿ � �ø �ý��øüþýú û� ù� �þø�þùüÿ ûÿ �ø ûþùþ��þúÿ � �ø ûþ¢ ��ü� ��ý� þÿúü ø�ý�ù ûÿ � �øûø�üøüþýú ø�� ��ù� ùøøû�� þ��ÿù ÿü � �ø �ý��øüþýú � ÿ��øúÿúüÿ ûÿ ÿüüÿ ø���ý �ÿ ��Ç��þÿ ûÿ �ø ��ý��ø�� øüþýú � ¤ú �ü�ûþøúü� �ÿ�ÿ��ÿúü �ø�� ý�ü ]NGH ^ ûÿ � �J�¸ ù�� �ÿù ��ù� ù ÿú ¿�aY� f\âc r X!â�XâÀ ýú � ÿ�ü úýüÿ� � �þ�� ý�üøúÿ ûÿ �ø��ý��ø�� øüþýú ùý� ù ùÿù ûþ� ��ÿúüù øù� ÿüù ÿü �ÿù ���üþ��ÿù þ���øúüøüþýúù � ýùùþ��ÿù ûÿ ÿ�� þ � �� �ÿú ùÿ�ø ü þ�ûÿ �ø ���ý��ÿ þ�� þúÿúüÿ ûþüÿ ¿��¥À· ûÿù ��ù� ù �úþ�ÿ�ùþüøþ�ÿù � ýü�ÿ ��ý� ýù ûøúù ÿ �ø� þü�ÿ ÿùü ûÿ üÿúüÿ� ûÿ ��� ýúû�ÿ � �ø �þüþ��ÿ ý��øúüÿ ûÿ � �ø� ý�û ûþ¢ þ�ÿ ûÿù �øú

�ø�ÿù �ýúüþýúúÿ�ù ùüøüþ��ÿ� ÿúü üi� �ù � �ø ��� ýúùÿ ��ÿ úý� ù û��ÿ�ý�� ýúù �ÿ� ýùÿ ��þúþ�ø�ÿ� ÿúü ù�� � �øûø� üøüþýú ûÿ �ø ���ùÿúüøüþýú ûÿù ýúÿ�üù ùÿ�ýú �ÿ ����þ üøúü �úþ�ÿ�ùþüøþ�ÿ ��ÿ ��ý�ÿùùþýúúÿ� �¡ý�� ÿ�ø úý� ù ���ùÿúüýúù ��� ùþÿ��ù þ���øúüøüþýúù ûÿ � �ÿúùÿþ�úÿ� ÿúü ûÿ �� ùÿ�ýú �ÿù úþ�ÿø�� i ý���þùý��ÿ ��ÿ� þÿ� �øú�ø�ÿ ûÿ ��ý��ø�� øüþýú � ý�� �ÿù û���üøúüù � ¡ý�� øÿúü�ÿ� �ÿ �ü� ��ú��ø�þùüÿ û� �øú�ø�ÿúý� ù � ýúü�ýúù ùýú �üþ�þùøüþýú ý��ÿ �øú�ø�ÿ ù��� ý�ü � �ú úý���ÿ þ�� ý�üøúü û �ø�ü�ÿù ý��ù û �þú�ý��øüþ��ÿ � ý� ù ÿ���ý�ýúù ÿúù� þüÿ ùýú þúü��²ü � ý�� û �ø�ü�ÿù ûþùþ��þúÿù � ýü�ÿ ÿ�� ��þÿúÿ ûÿ �ý��øüþýúù ý��üÿù û��øú�ø�ÿ �� � ÿüþ�ÿ ø� � � ûÿù ����þù û �þú��úþÿ��ù � ÿ��ÿü û �ÿ���þ� ÿ� �ÿ��ù ûÿ� øúûÿù � ¤ú©ú úý� ù úý� ùþúü��ÿùùýúù ø�� ý�üþ�ù û �øþûÿ � �ø �ý��øüþýú � � �þú�ý��øüþ��ÿ ÿü ÿú �ø�üþ��þÿ� �ø ��ý��ø�� øüþýú ùÿ ��²üÿ � þÿú

ø�� K�¤´ � �ÿù ÿ�� ��þ� ÿúüøüþýúù ��ÿúüÿù ÿ� ÿü��ÿù � � ��úþ�ÿ�ùþü� ¡þÿ��ÿ ÿü � ø�þÿ ��þÿ L¡ø�þù eM � ÿ��ÿüüÿúüû �ø�����ÿúûÿ� �ø � øúþ��ÿ ûýúü �ÿù �ü�ûþøúüù ø� ý�ûÿúü ÿù úý��ÿø�� ý�üþ�ù ý��ÿ �ø� ÿ�ÿ���ÿ �ÿù ÿ�ø� ÿúùù�� �ø�þúÿ ø�ÿ ý��ÿüþýúù ý����üÿ� ÿúü ø�üý� øüþù�ÿù �

� )� �,031�,35 � �¤úùÿþ�úÿ� �ú �øú�ø�ÿ ú �ÿùü �øù �úÿ ©ú ÿú ùýþ � � �ÿúùÿþ�úøúü �ÿ��ÿ � �øþ�ÿ �øùùÿ� ûÿù ýúÿ�üù ��� ù ý��ýþúù ø� ùü�øþüù � ý�� �ÿ ûý� øþúÿ ûÿ ùýú ý��ù ý��ÿ �ø� ÿ�ÿ���ÿ � ���þü��ÿ û �ø��ý�þü�� ÿù �ø ýúùü��üþýúû �ø���þøüþýúù ý� �ÿù üÿ�úþ��ÿù ûÿ ý�� þ�øüþýú ûÿù �øú�ø�ÿù � �ú ÿùùøþÿ ÿú û��þúøúü ��� ùþÿ��ù �ø�þøüþýúù ûÿý��ù ÿ� þùüøúüù ûÿ û�üÿ��þúÿ� �ø � øúþ��ÿ ûýúü �� � ÿ�ü ��ÿúû�ÿ ùø ��øÿ � Cú ÿ�üøþú úý���ÿ û �ø����ÿúüù�üþ�þù�ù þþ � ÿ��ÿúü ²ü�ÿ �ÿ��þù � ý�� �ÿù �øú�ø�ÿù �ýúüþýúúÿ�ù üi� �ù ûiúø� þ��ÿ� ÿúü ý��ÿ ��ÿ� ÿ ý� � ý���ÿù �øú�ø�ÿù �ýúüþýúúÿ�ù ���ù � �ø � øùËÿ�� � �ú ���ùÿúüÿ üý�ü û �ø� ý�û � �ø���ý �ÿ �øùùþ��ÿ ýÆ � �ø�üþ� ûÿ �øý�����ÿúùþýú û ��ú �ýû��ÿ ûÿ ø�� � L�ÿ λ ø�� �M ýú �øùùÿ �ø� ø� ý�üù ù�ÿùùþ�ù � �ú �øú�ø�ÿ ûÿ ��ý��ø� � øüþýú ý���ÿü � �ø ûÿ�� þ�� ÿ ø���ý�ÿ ÿùü ý�þÿúü�ÿ ¿üi� ÿù ÿü ùü��ü��ÿù ûÿ ûýúú�ÿùÀ� �� ø� ùùþ ýú ýúùü�� þü

� �ø�üþ� ûÿ ùü��ü��ÿù ùþ���ÿù �ÿù ùü��ü��ÿù ûÿ ûýúú�ÿù �øùùþ��ÿù ûøúù �ú øû�ÿ üi� � ùüøüþ��ÿ� ÿúü � �ø ü�ýþ ùþ�� ÿ ø���ý�ÿ ýúÿ�úÿ � �ý��øúþùøüþýú ÿü �ø ùü��ü��øüþýú û �ø���þøüþýúù � ¤ ��ÿ ý��ø�ÿ �ÿù � ýû��ÿù ý� � ÿüù ÿü� ýû��ÿù �ø�ø� �ü��ù � �ø ��øü�þ�� ÿ ø���ý �ÿ ýúÿ�úÿ �ÿù û���üøúüù ÿü ù �þúüÿ��ý�ÿ ù�� � �ø���ÿúüþùùø�ÿ ûÿ ��ý��ÿ ��ÿ� þÿ� �øú�ø�ÿ �� Í� Í� �×

λ Ñ¡¢Ñ× ¢ ¡×£ ¢¡Ó¤¡¤ÐÔ ¥ÒÓÑÕØÒÓÓÐ ¢Ô�ÿ

λ ø�� � ûýúúÿ �úÿ û�©úþüþýú �ý��ÿ��ÿ ûÿ ÿ �� �ÿùü �ú ø�� � � �� � ÿ��ÿü ûÿ �øþùýúúÿ� ù�� �ÿù ø�� �ù ù���ÿù ùü�øü��þÿù û ���ø��øüþýú ûÿù ø�� �ù ÿü ù�� �ø üÿ��þúøþùýú û ��ú ø�� � � ÿ � ýû��ÿ ûÿ ø�� � ÿùü ùý� ù � øÿúü� ý�� �ÿù �øú�ø�ÿù �ýúüþýúúÿ�ù ��ø ���ùÿúüøüþýú û� �ýû��ÿ ����ûøúü ÿ��ÿ û ��ú �øú�ø�ÿ ÿùü �úÿ ø���ý �ÿ �øùùþ��ÿ �� þ ÿùü ùý��ÿúü��ý� ýù�ÿ ÿú � ø�ü�þùÿ ý� ÿú ¥¤J ÿú �ø�üþ��þÿ� � ý�� � �þúü�ýû�üþýú ûÿù üi� ÿù ÿü ��ý��þ�ü�ù ù�� �ÿù üi� ÿù � �úùþ���þ© ÿ øþúùþ �ÿù �øú�ø�ÿù � ý�� ùÿ ýúÿúü�ÿ� ù�� �ÿ��ù � ýû��ÿù �

¦§��ðêïìîïðñ �ðí ¨ð� ô�îïñ� © ìê� ïñòíó ª{{{ «#&� «+%S ¬ �­� ïêòñêò�© ì�îòí�® ðêîðíìî �¯�òê�ñðëð� ïò� èò ë °±ñ �ðí� ìîïðñ òî èò ëì ¨ð���ñïêìîïðñ ôð�í ë °�ñ�òï�ñò� òñî �

Page 110: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r² r qs wqn�sqp vz N�N �ÿùü ø� ùùþ ûÿ úýü�ÿ � ýþúü ûÿ ��ÿ �ø � ýùùþ� þ�þü� ûÿ � þÿú ø�����ÿúûÿ� �ÿù ø�øü��þùüþ��ÿù ûÿù �øú�ø�ÿù �ýú üþýúúÿ�ù ��ÿ ùýúü � �ÿù ùü�øü��þÿù û ���ø��øüþýú Lþ�� �ûþøüÿ ý� �ÿüø�û�ÿM ÿü �ÿù �ø�ÿ��ù �ýúüþýúúÿ��ÿù � � ���þü��ÿûÿ ùü��ü��ÿù ûÿ ýúü���ÿ ý��ÿ �ø ����ùþýú ù �ÿ���þ� ÿ ø� ùùþ ý��ÿ �ú ùþ���ÿ ý�� þúøüÿ�� Lûÿ � ýþúü ©�ÿMùÿ�ýú �ø ùü�øü��þÿ ÿ� ��ýi�ÿ � �ÿùü ø� ùùþ � �ýøùþýú ûÿ ýûÿ� ûþ���ÿúüÿù ùü��ü��ÿù ûÿ ûýúú�ÿù L� ýý ��ÿúù ÿúüþÿ�ù ý���ÿùM �ø� ûÿù λ üÿ��ÿù ý��ÿù� ýúûøúü � ûÿù �ø�ÿ��ù �ýúüþýúúÿ��ÿù � �ú ø����þÿ øþúùþ �� ��ú ��ý��ø��ÿ

ùýþü �úÿ ûýúú�ÿ ÿü ��ÿ �ÿù ûýúú�ÿù �� þùùÿúü ²ü�ÿ ýû�ÿù �ø� ûÿù ��ý��ø��ÿù �� �þúü�ýû�üþýú û ��ú ùiùü�� ÿ ûÿ üi� ÿù ý��ÿ �ÿù üi� ÿù ùþ���ÿù ø�� ý�üÿ û ��úÿ �ø�ü �úÿ þú�ý��øüþýú �üþ�ÿø� ø�� � ÿü û �ø�ü�ÿ �ø�ü �øþ�þüÿ �ÿ �øþùýúúÿ� ÿúü ù�� �ø üÿ��þúøþùýú ûÿù ��ý��ø��ÿù � �ú þúü�ýû� þü ø� ùùþ �øúøü��ÿ û� � ý �i� ý���þù� ÿ � �ø �� ûøúù ÿ øû�ÿ ùþ���þ© � ��ÿ �øùùø�ÿ û� λ ø�� � � �ú ¿��øþÀ �øú�ø�ÿ ù �ÿ� ÿü�ÿ ø�ý�ù �ø� � �øû� ýúüþýú ûÿ üi� ÿù ÿü ùü��ü��ÿù ûÿûýúú�ÿù ûÿ �øùÿ ÿü ûÿ ¿�ý��ÿù ù� �þø�ÿùÀ Lùü��ü��ÿù ûÿ ýúü���ÿ úÿ ù� þ�øúü �øù �ø ùü�øü��þÿ �üø��þÿM � ÿ�øÿùü û �ø�üøúü ��� ù ú�ÿùùøþ�ÿ � ý�� �ÿù �øú�ø�ÿù � ��ø��øüþýú þ�� �ûþøüÿ ý��ÿ ��ÿ� ÿ ý� �� � �ú ý���ÿúû��� ù �øþ�ÿ� ÿúü øþúùþ � ý����ýþ �ø ����ùþýú ûýþü ²ü�ÿ ýúùþû���ÿ ý��ÿ �úÿ �ý��ÿ ù� �þø�ÿ ÿü � ý����ýþ ÿ��ÿ�øþü � ÿ�û�ÿ �ø ��ý��þ�ü� ûÿ üÿ��þúøþùýú ûÿù ��ý��ø��ÿù üi� �ù �ÿ üi� ÿ ûÿ ���ùÿúüøüþýú � ÿ�ü ²ü�ÿ ��ýûþ��� � ûÿù �ü�ûþøúüù ù� þ�øúü �úÿ �ýþÿ ��ý�ÿùùþýúúø�þùøúüÿ ý��ÿ �ÿù¥¤�� � � �þúü�ýû�üþýú �ý��ÿ��ÿ ø�� ùiùü�� ÿù ûÿ üi� ÿù � ÿ�ü ÿúù� þüÿ ²ü�ÿ �üþ�þù�ÿ � ý�� ý��ø�ÿ� �ÿù ùiùü�� ÿùûÿ üi� ÿù ûÿ �øú�ø�ÿù ��� ù þúû� ùü�þÿ�ù ý��ÿ ³ø�ø � ÿüüÿ �ýþÿ ÿùü ù� þ� þÿ ûÿ�� þù ��� ùþÿ��ù øúú�ÿù ø� ¥¤��B�Jµ ûøúù �ÿ ý��ù ¿�øú�ø�ÿù ´ýúüþýúúÿ�ù ÿü Ki�ø�ÿÀµ �

� Í� Ͷ ·ÚÛÐÔ ÐÕ ÔÕÖ×ÑÕ×ÖÐÔ ÙÐ ÙÒÓÓ¸ÐÔ�ÿ ý��ù ¿üi� ÿù ÿü ùü��ü��ÿù ûÿ ûýúú�ÿùÀ úý� ù ùÿ���ÿ �ú ûÿù ý��ù þúýúüý��úø��ÿù � ý�� �ø �ý��øüþýúû �þú�ý��øüþþÿúù � �� ÿùü � þÿú ù¹� ý�þÿúü� ø��ý�þü�� þ��ÿ ÿü ��ý��ø�� øüþýú � �� � ÿ��ÿü ûÿ ýúùü�� þ�ÿ � �ø�üþ� ûÿù���� ÿúüù ûÿ �øùÿ û ��ú �øú�ø�ÿ �ÿù ��þúþ�ø�ÿù ùü��ü��ÿù ûÿ ûýúú�ÿù ��ÿ �ÿù �ü�ûþøúüù �ü�ûþÿ�ýúü �ø� �ø ù� þüÿûøúù ûÿù ý��ù ��� ù ù� �þø�þù�ù � �ú � ÿ�ü þüÿ� û ��úÿ �ø�ü �ÿù ùü��ü��ÿù �þú�øþ�ÿù L�þùüÿù üø��ÿø�� üø��ÿù ûÿ

�ø�ø�ÿ � � �M ÿü û �ø�ü�ÿ �ø�ü �ÿù ùü��ü��ÿù ø�� ý�ÿùÿúüÿù Lø���ÿù � þúøþ�ÿù ú øþ�ÿùM ÿü �ÿù ùü��ü��ÿù i�þ��ÿùLø�üý� øüÿù ��ø��ÿùM �� �� ùø�ÿ û ��ú �øú�ø�ÿ ùüøüþ��ÿ� ÿúü üi� � øþûÿ � �ø � øúþ���øüþýú ûÿù ý� ��øüÿ��ù ý� �ýúüþýúù ù�� ÿù ùü�� ü��ÿù � Jþúùþ �ø û��ø�øüþýú û ��úÿ úý��ÿ��ÿ ùü��ü��ÿ ÿúü�ø�úÿ �ø û�©úþüþýú û ��ú üi� ÿ ûÿù �ýúüþýúù ûÿ ��øüþýúÿü û �ø�ù �� þù ûÿù ý� ��øüÿ��ù ù�� ÿù �ø�ÿ��ù ûÿ ÿ üi� ÿ ý��ÿ ûøúù ]NNd^ �Ký�üÿù �ÿù ùü��ü��ÿù ûÿ ûýúú�ÿù �øùùþ��ÿù úÿ �ýúü �øù üý�� ý��ù � ýú � �úø�ÿ ø�ÿ �ÿ ùüi �ÿ ���ÿ� ÿúü �ýú üþýúúÿ� � ¡ý�� ÿ�ø �ú �øú�ø�ÿ �ýúüþýúúÿ� ÿü þ�� ��øüþ� ÿùü ú�ÿùùøþ�ÿ � �ÿù ùü��ü��ÿù ý��ÿ �ÿù üø��ÿø�� ý��ÿù ùü��ü��ÿù i�þ��ÿù ù �ÿ���þ� ÿúü ûÿ ��þ� ÿ ø� ý�û ��� ù �øþ�ÿ� ÿúü ÿú þ�� ��øüþ� � Cú ûÿ�� þ�� ÿ þúü��²ü ÿùü ûÿ

� ý��ýþ� ýûÿ� ûÿ ûÿ�� �øxýúù ü��ù ûþ� ��ÿúüÿù �úÿ � ²� ÿ ùü��ü��ÿ ûÿ ûýúú�ÿù �ÿ�ø ø� �úÿ úøü��ÿ��ÿ� ÿúü ø�� üi� ÿù ø� ùü�øþüù ûÿ ûýúú�ÿù ýÆ � �ýú � øù��ÿ � �þ���øúüøüþýú û ��úÿ ùü��ü��ÿ ûÿûýúú�ÿù � �ÿ üi� ÿ ÿùü ýúú� �øþù �øù ùø û�©úþüþýú � ÿ�ø �ý�ÿ � ��ü�ûþøúü � ��ÿúû�ÿ û� �ÿ�� ÿú ÿ���þ� øúü ùÿù� ÿùýþúù L���� ÿúüù ÿü ý� ��øüÿ��ùM ø�øúü ûÿ �øùùÿ� � �ÿ�� ��ø�þùøüþýú � ÿüüÿ ú�ÿùùøþ�ÿ ù� �þ©øüþýú �øùùÿ �ø�� ���þü��ÿ ûÿ � �þúüÿ��øÿ û ��ú �ýû��ÿ ùþ���ÿ �� � ÿüþ�ÿ ø� � � �ú � ÿ�ü ø¢úÿ� ÿ � øù��ø�ÿ ø�ÿ �ÿù û��ø�øüþýúù� c!"�\⺠þúü�ýû� þüÿù ûøúù �ø ûÿ�úþ��ÿ ûþùü�þ��üþýú û ��� � ÿüþ�ÿ ø� � �ÿ ý��ù �üþ�þùøþü � �ø û�øûÿ ����ûÿúüÿ �ÿ �øú�ø�ÿ ¡øùø� ý��ÿ �øú�ø�ÿ ø��ý�þü�� þ��ÿ � �� � ÿ�ü ø�ý�ù²ü�ÿ ýúùþû��� ý��ÿ �ú ù�� ÿ� ¡øùø� ûÿ �ø�ü �ÿ � ý �i� ý���þù� ÿ �ø�ø� �ü�þ��ÿ �� þ � ÿ��ÿü ûÿ ýúùü�� þ�ÿ ûÿùþü��øüÿ��ù �ýúüþýúúÿ�ù ��� ù ��ú��ø�� ��ÿ úý��ÿø� ý��ù» ûÿ ûÿ�� þ�� ÿ øúú�ÿ ûÿ � �øü�ÿ� ¥¤CB ��J � ûÿ ¡ø�þù e ÿùü ÿú �úÿ þ��� ùü�øüþýú � �úü�ý��ÿ ø� ùùþ ÿú �øùùÿù ����ø�øüýþ�ÿù �úÿ üÿ��ÿ ���ùÿúüøüþýú �¼½éñ ïò èò� �ð� ïêïòë� §ôôëïêìîï�� �¾{{{ «�� ! «�� !!�-� «/%�¿-�� #��-R�À��R�&�-� !-�S� -� -� �SR#"ÁÂÂ�"��$-� «T � RÃÄ ÅÆÇÈÉÊ ÉËÄ ÊÌ Í îóô ò� èò èðññéò� êðñêíòî� ì#òê êðñ�îí�êîò�í� òî ëì$ òë� ôíï#é� �Î{{{ «��/+�Ï «�� !!�-� «/%�$-�S�ÁÂÂ��� �#!�� �#!�ÁÐ �� ���� R�&

Page 111: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

N�f jklmnopq � r qs wqn�sqvqs o� Í� ÍÎ Ñ ÒÙ× ¢ÐÔ ÐÕ ÒÓÔ ÐÕÔ

Cúÿ ø�ü�ÿ ø���ý�ÿ ù �þúü��ÿùùÿ ø�� úþ�ÿø�� ûÿ ùü��ü��øüþýú û �ø���þøüþýúù ûøúù �ÿ øû�ÿ û� üi�ø�ÿ ùüø üþ��ÿ � ¡ý�� ÿ�ø �� � ÿüþ�ÿ ø� � ÿùü �ú � ýú øúûþûøü � �� � ÿ��ÿü ûÿ � þÿú ûþùüþú��ÿ� �ø úøü��ÿ ûÿ �ø ùü��ü��øüþýúÿú �øùùÿù ûÿ ÿ��ÿ �üþ�þùøúü �ÿù � ýû��ÿù �ø�ø� �ü��ù L�ø� û �ø�ü�ÿù � ýû��ÿùM � ÿüüÿ ûÿ�úþ��ÿ ø���ý �ÿ ù �þúù� þ�ÿûÿù üi� ÿù ø� ùü�øþüù ûÿ ûýúú�ÿù ÿü � ýþúüÿ �ÿù ûþ¢ ��ü�ù �þ�ÿù ø� �ø�üø�ÿ ûÿ üi� ÿù � ÿüüÿ ���ùÿúüøüþýú þúûþ��ÿ�ÿù ûÿ�� �ýþÿù û �ÿ�üÿúùþ� þ�þü� � ÿ� üÿúùþýúù ûÿù ûýúú�ÿù ÿü ÿ� üÿúùþýú ûÿù ü�øþüÿ� ÿúüù ÿü ùý��þ�úÿ �ÿ�� û�ø�þü� ��� ù �þ��� ùü�ÿ �ø� ûÿù ÿ�ÿ���ÿ ûÿ ùü��ü��øüþýúù � þ� üÿù Lý� � ÿüù ÿü � ýû��ÿù �ø�ø� �ü��ùM ý��ÿ ���ùÿúü� ûøúù]Ä^ ÿü ûøúù ]NfÄ^ ûýúü �úÿ �ÿ�ùþýú ÿú �þ�úÿ ÿùü øÿùùþ��ÿ Õ � Cúÿ �ÿ�ùþýú ��� ù ù� �þø�þù�ÿ ¶Ö ÿùü ø� ùùþ ÿú �þ�úÿ �ÿ ý��ù ù �øû�ÿùùÿ � ûÿù �ü�ûþøúüù ýú© ���ù û� úþ�ÿø� �ø�ü�þùÿ ý� ü�ýþùþ�� ÿ i�ÿ � �� � ÿ�ü �øþ�ÿ �ø�üþÿ û ��úý��ù ù�� �ø ��ý��ø�� øüþýú ý� � ÿü � ý�� �ø ý��ø�øþùýú ûÿù � ýû��ÿù ý� � ÿüù ûøúù �ú ��ü ûÿ � þý ûþ�ÿ�ùþü� ý�ûøúù �ú ý��ù ù�� �ÿù ü�øþüù ø�øú�ù ûÿ ùü��ü��øüþýú ù �þúü���øúü ø�ý�ù ûøúù �úÿ ý�üþ��ÿ ¿��úþÿ �ý�þþÿ�À�ÿüüÿ ���ùÿúüøüþýú ø �ü� ûýúú�ÿ � ÿúûøúü þú� øúù ûøúù �ÿ ý��ù ûÿ � ø�ü�þùÿ ¡�¥ ¶¶ ÿü ùÿ û��þúÿ ÿú �ø�üþÿûøúù �ÿ ý��ù øü�ÿ� ��� ¶¸ �� Í� ÍÌ Ñ × ÑÒØ Ø Ð ÛÖÐØ ØÐÖ ¢¡Ó¤¡¤Ð

� �þúÇ�ÿúÿ ûÿ � �ø���ÿúüþùùø�ÿ û� ��ÿ� þÿ� �øú�ø�ÿ ø üý�� ý��ù �ü� ��øúûÿ � ¤ ��ÿ �øxýúúÿ �ø � þùþýú ûÿ � ��ü�ûþøúüù�� � ���þü��ÿ ûÿ ��ý��ø��ÿù ÿü ùýú �ø�� ý�ü ø�ÿ �ø � ø�þúÿ �

� �þúü��²ü û� �ýû��ÿ �ýúüþýúúÿ� ý��ÿ ��ÿ� þÿ� �øú�ø�ÿ ÿùü ûÿ �øþ�þüÿ� �ø ý�����ÿúùþýú ûÿ ��� ùþÿ��ùúýüþýúù þ�� ý�üøúüÿù ý��ÿ �ø úýüþýú ûÿ ø�� � �ø ý�� ýùþüþýú ûÿ �ýúüþýúù �ø ����ùþ� þü� �ø ��øüþýú ûÿ�ø�ÿ��ù ÿü �ÿù ùü��ü��ÿù ûÿ ûýúú�ÿù ûiúø� þ��ÿù � �ÿ � ýû��ÿ þ�� ��øüþ� ���þùÿ � ��üþ�þùøüþýú � ��ýþ�ÿ L�ø�üø�ÿý� ý� þÿM øþúùþ ��ÿ �ÿ ýúü���ÿ ûÿ � �ÿ���üþýú Lù���ÿúÿ þü��øüþýú M � � ��üþ�þùøüþýú û ��ú �øú�ø�ÿ � ýùù�ûøúüÿù ûÿ�� �ýû��ÿù � ÿ��ÿü ûÿ �øùùÿ� û ��ú �ø�ü úþ�ÿø� û �ø� ùü�øüþýú L�ýúüþýúúÿ�M ø� ýúü���ÿ ��� ù ���þù ûÿ� �ÿ���üþýú ÿü ûÿ � ��üþ�þùøüþýú � ��ýþ�ÿ Lþ�� ��øüþ� M � Cú üÿ� �øú�ø�ÿ � ÿ��ÿü ø�ý�ù ûÿ ý��ø�ÿ� �ÿù ûÿ�� �ýû��ÿùÿú �ø�üþ��þÿ� ÿúü�ÿ ý� þÿ ÿü �ø�üø�ÿ ÿü ÿúü�ÿ ����ùþýú ÿü þü��øüþýú � �ÿ øû�ÿ û� üi�ø�ÿ ùüøüþ��ÿ ý� �ÿ �ú�ø�ûÿ �ý� � ý�� �ÿù ÿ�� ��þ� ÿúüøüþýúù û� û���üøúü � ¥øúù ÿ øû�ÿ �� ÿùü �ú � ýú øúûþûøü �ÞY_ ]Ù¼[\[¼à ß[ YX \X½Ú ]¼[ Cúÿ ûÿù �þüþ��ÿù ��þúþ�ø�ÿù ûÿ � ��üþ�þùøüþýú ûÿ �� ý��ÿ ��ÿ� þÿ� �øú�ø�ÿ��ý� þÿúü ûÿ ùýú ��ýþ�úÿ� ÿúü ûÿ �ø � ø�þúÿ �Cúÿ ��ÿ� þ��ÿ �þüþ��ÿ ��ý� þÿúü ûÿ �ø � øúþ���øüþýú � ��ýþ�ÿ �� þ ÿùü ûÿ ��� ù �ø�ü úþ�ÿø� �� �ÿú ý� ¡øùø� ��ÿ��ÿù �ÿù �ýúüþýúù û �ø��ýøüþýú ùýúü � þùþ��ÿù L�ú Xa� L ÛÛM ùÿ�ø ÿ���þþüÿM �ÿù �ýúüþýúù ûÿ ���� ��øüþýú� ��ýþ�ÿ ú �ÿ� þùüÿúü �øù ø� ÿ��ÿ þ ÿùü ø�üý� øüþ��ÿ LB M � ÿüüÿ �þüþ��ÿ ø �ü� �ø�øi�ÿ �ø� �ÿ ù��ù û��øú�ø�ÿ ³ø�ø �� þ ø ��ý�� �ø ���� ��øüþýú ø�üý� øüþ��ÿ ûÿ � ��ýþ�ÿ ý��ÿ �ø�ÿ ûÿ ù¹�ÿü� û �ÿ���üþýú �Cúÿ ûÿ�� þ�� ÿ �þüþ��ÿ � ý�üÿ ù�� � �ø� ùü�øüþýú û� ýúü���ÿ ûÿ � �ÿ���üþýú � � �ø úýüþýú ûÿ �ýúüþýúù ÿú üøúü ��ÿ�ø�ÿ��ù � øúþ���ø��ÿù � ÿ��ÿü ûÿ �ø�ø� �ü�ÿ� �ÿù ��ý��ø��ÿù �ø� û �ø�ü�ÿù ��ý��ø��ÿù � ÿüüÿ ��ú��ø�þùøüþýú�ÿúû �ÿ ýûÿ ��þü ��� ù ø� ùü�øþü � �ÿùü ûÿ úýü�ÿ � ýþúü ûÿ ��ÿ �ú ��øúû ø�øúüø�ÿ � �ÿ ýûÿ ùÿ�ø ��� ù ýúþù ÿü��� ù �þùþ��ÿ � �ø ý�� ýùþüþýú ûÿ �ýúüþýúù ÿùü �úÿ úýüþýú ��ÿ �ÿù �ü�ûþøúüù ý���ÿúúÿúü � þÿú ÿü � þüÿ �¥ÿ ��� ù �ø � ýùùþ� þ�þü� û ��üþ�þùÿ� �ÿ ùüi �ÿ �ýúüþýúúÿ� ý� �ÿ ùüi �ÿ þ�� ��øüþ� ûøúù �ú � ²� ÿ �øú�ø�ÿ � ÿ��ÿüû �øûø�üÿ� � ���þü��ÿ û �ø��ý�þü�� ÿù ûøúù �ÿ ùüi �ÿ øû���øü �YX¼ÙXÙ[ XYÙ_^]àÚ\]ÜZ[ �� � ÿ�ü ²ü�ÿ �� ý��ÿ �ú �øú�ø�ÿ ø��ý�þü�� þ��ÿ � �� ùÿ ���üÿ �øþ�ÿ� ÿúü � ûþ�� �ÿúüù ùüi �ÿù ûÿ ��ý��ø�� øüþýú � �ýúüþýúúÿ��ÿ þ�� ��øüþ�ÿ ÿü � þ�üÿ � ¥øúù ]N~f^ ÿü ]Ndf^ �� þ ùýúü �ÿù� ÿüþ�ÿ� ÿúüûÿ�� ý���ø�ÿù ù�� � �ø��ý�þü�� þÿ ÿü � �ø��ý�þü�� þÿ ��ø��þ��ÿ �� ÿùü �üþ�þù� ûøúù �ú ùüi �ÿ þ�� ��øüþ� ��þúþ�ø�ÿ � ÿúü ý��ÿ �ú ù�� ÿ� ¡øùø� � Üþÿú ��ÿ � ý�� �ú ��ý��ø��ÿ�� �ýúüþýúúÿ� ÿ�ø ùýþü �ú � ÿ� ûý�� ø�ÿ þ� ÿùüÿú �øþü øùùÿà þ�� ý�üøúü ûÿ �ÿý���þ� ø� �ýþúù üý�ü ¡øùø� � ý�� �ú �øú�ø�ÿ ø��ý�þü�� þ��ÿ ùÿ �ý��øúü ��ú��ø� �¥øúù ]Gg^ ÿü ]NNe ^ � �ø���ý�ÿ �ýúüþýúúÿ��ÿ ûÿ �ø ��ý��ø�� øüþýú ÿùü û��þüÿ � ¤ú©ú ûøúù ]N~Ä^ �ÿù ûÿ�� ùüi �ÿù

Ý�#� �RR#& «��%�# «/%�¿%-� ��&+�%!�#�� !-��Þ &%�! #R «��%�# «/%�¿%-���� +R��� + ����íð�íì�� ìîïðñ ß$à òî òî ® ï�îíï$�îïðñ ª{{{ «�� ! «�� !!�-� «/%�¿-�� #��-R�À�� R�&�-� !-�S�-� -� �� +$"Á P"��$-� «T � R¬ ��¦© ðèá ëò� òî �ìñ�ì�ò� â ß$à òî� ª{{{ «��/+�Ï «�� !!�-� «/%�� #� %�!-�ÁÂÂ��#RS+�%+S�� R+���� R�&�¬ �

Page 112: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r² r qs wqn�sqp vz N�d

ùýúü ���ùÿúü�ù �ø� �úÿ ù� þüÿ û �ÿ�ÿ�þÿù ýúù���ÿúüù � �� ÿ� þùüÿ û �ø�ü�ÿ �ø�ü ûÿù ý���ø�ÿù û �ø��ý�þü�� þ��ÿ�üþ�þùøúü �� ý��ÿ �øú�ø�ÿ û �þ���øúüøüþýú ý��ÿ ]Nfe^ �[ãä Þ^]\ [¼àXà]_¼¾ ¥ÿ úý���ÿ� ùÿù ÿ�� ��þ� ÿúüøüþýúù û �ÿúùÿþ�úÿ� ÿúü ûÿ �� ýúü �ü� � ÿú�ÿù ûøúù �ÿù ��ÿ � þ��ÿù øúú�ÿù �úþ�ÿ�ùþüøþ�ÿù ø� J� ¶· ÿü ûøúù �ÿù �øùùÿù ����ø�øüýþ�ÿù � �� ú �ÿ� þùüÿ �øù ûÿ ø�üÿ úøüþýúø�ÿûÿù ûþ� ��ÿúüù �øú�ø�ÿù ÿúùÿþ�ú�ù ûøúù �ÿ �ø�i�þúü�ÿ ûÿù �ý��øüþýúù ù�� ��þÿ��ÿù � ¨ � �ýøùþýú û� kacp `a�´�� ¶´ B�i ý� ùþúÿø� ]GÄ^ ø ÿ�ÿü�� �ú �ÿÿúùÿ� ÿúü �ø�üþÿ�¶µ ûÿ � �ÿúùÿþ�úÿ� ÿúü ûÿù �øú�ø�ÿù �ýúüþýúúÿ�ùý��ÿ ��ÿ� þÿ� �øú�ø�ÿ � �ÿ J� ø ÿ�� ��þ� ÿúü� � �ø���ÿúüþùùø�ÿ ûÿ �� ÿü Jûø ûøúù ùýú i�ÿ J ]ÄH^ � Üþÿú��ÿ úøüþýúø� � �þ���øúüøüþýú ���þýúø�ÿ ûÿ ÿü ÿúùÿþ�úÿ� ÿúü � ÿ�ü �ÿ�²üþ� ûÿù �ý��ÿù ûþ�ÿ�ùÿù ÿú �øþùùøúü �ú�ýþ� þ�� ý�üøúü ø�� ��� þ� ÿù � �ûø�ý�þ��ÿù �ý ø�ÿù � �ÿù �øùùÿù ����ø�øüýþ�ÿù �øþùùÿúü ø� ùùþ �ÿ �ýþ� ÿúü�ÿûþ� ��ÿúüù �øú�ø�ÿù ø��ý�þü�� þ��ÿù ý��ÿ ¡øùø� ý� �� � øþù ûøúù �ø ü��ù ��øúûÿ � ø� ý�þü� ûÿù øù �ÿùüø� � �þ��ü �� þ ÿùü �üþ�þù� � B �ý�ø�ÿ� ÿúü ÿù ÿ�� ��þÿúÿù ýúü �ü� ÿü ùýúü ��� ùùþÿù üøúü ��ÿ �ÿ��ù þú þüþøüÿ��ù�ÿùüÿúü ÿú ��øÿ �[à å½Ú[\[ �ø ����ø�ü ûÿù ø����ÿúüù �üþ�þù�ù � ý�� �ø�ý�þùÿ� �ÿ � ýû��ÿ �ýúüþýúúÿ� ý��ÿ ��ÿ� þÿ� �øú�ø�ÿùýúü �ø�ø��ÿù � ý�� �ÿ �øú�ø�ÿ ��ÿ� ÿ üøúü û� � ýþúü ûÿ ��ÿ ø� ùü�øüþýú �ýúüþýúúÿ��ÿ ��ÿ ý��ø�øþùýú ûÿùùüi �ÿù �ýúüþýúúÿ� ÿü þ�� ��øüþ� � � �ÿ�ÿ���ÿ û� ¥¤CB ��J � ûÿ ¡ø�þù e ÿùü ùþ�úþ©øüþ� � �ÿ ��ÿ� þÿ� ý��ù û �þú �ý��øüþ��ÿ æ úý��� ¿¡ �ý��ø�� øüþýú ����ùþ�ÿÀ¶µ æ ÿùü �øù� ù�� ��ÿ� ÿ ÿü � �ÿú� þ�ýúúÿ� ÿúü ¥ ���ÿ� ÿ¶º ]~g^ �¨ �ø ùý�üþÿ ûÿ ÿ ý��ù æ �ÿù �ü�ûþøúüù ýúü ý���þù �ø ����ùþýú ÿü �ø � øúþ���øüþýú ûÿ ùü��ü��ÿù �þú�øþ�ÿù ÿüø�� ý�ÿùÿúüÿù ûiúø� þ��ÿù � çú � ÿ�ü ý� ùÿ��ÿ� ��ÿ � ý�� ù� �þ© ÿ� �ú ��ý���� ÿ ý� ûÿù ÿ�ÿ�þÿù æ �ú � ùÿ�ûý �øú�ø�ÿ ûÿ üi� ÿù ÿùü �üþ�þù� � �ÿù �ü�ûþøúüù ��ÿúúÿúü øþúùþ � ��ø� þü�ûÿ ûÿ ý��ÿúüÿ� �ÿ�� ��ýû�üþýú �ø� �úÿþú�ý��øüþýú ûÿ üi� ÿù �Z¼[ W^X][ ß ]è ½ZYàÞ é Y ê]¼»Þ^[¼½[ ß[ àëä [¾ � �þúü��²ü ûÿ J�� � ÿ�ü ²ü�ÿ ûÿ úý��ÿø� ùý��þ�ú� ���ÿ � ùýúüi�ø�ÿ ùüøüþ��ÿ �� þ ø��þ� � � �þú���ÿúÿ ûÿ üi� ÿ ø�üý�þùÿ �úÿ ��þü��ÿ ûÿ ��ý��ø��ÿù ø� ùùþ ýúþùÿ �� �ÿú �ìÿ� ÿ �� �þú���ÿúÿ ûÿ üi� ÿù ÿùü �ú øüý�ü � øþù ø� ùùþ �úÿ �øþ��ÿùùÿ ûøúù �ø � ÿù��ÿ ýÆ �ú �ìÿ ûÿ � �þú���ÿúÿ � ÿ�ü��ýû� þ�ÿ �ú � ÿùùø�ÿ û �ÿ��ÿ�� ûþ¢ þ�ÿ � þúüÿ����üÿ� �ø� �ÿ û���üøúü � �� ÿùü � ýùùþ��ÿ û �ÿ���þ��ÿ� �ÿ � �øúþù� ÿû �þú���ÿúÿ � øþù �ÿ û�üøþ��ÿ� ú �ÿùü �øù û� úþ�ÿø� ûÿ � �þú þüþøüþýú û ��ú �øú�ø�ÿ � �ø ý���úø�ü� � øùËÿ�� ø��ø�þù� � �ÿú� þ�ýúúÿ� ÿúü � ÿ�þ�� ]Hd ^ ¶» æ � ý�� �úÿ ��þùÿ ÿú � øþú �øþ�ÿ û� �øú�ø�ÿ ÿú ÿ���þþüøúü �ÿù ÿ��ÿ��ùû�ÿù ø� üi�ø�ÿ � ¡ý�� ÿ�ø �ÿ üi� ÿ�� ûÿ � ÿ�þ�� øúúýüÿ � �þú���ÿúÿ ûÿ üi� ÿ ]Hf^ � ý�� ��ýû� þ�ÿ �ú � ÿùùø�ÿ��� ù ���þù � ¡ý�� ÿ �øþ�ÿ �ÿù ø�üÿ��ù ýúü �ü�ûþ� �ú �ø��ÿ ÿúùÿ���ÿ û �ÿ��ÿ��ù ÿú � ý��úø�þùøúü �ÿù ùÿùùþýúùûÿù �ü�ûþøúüù � ��ù ýúü �ø� �ø ù� þüÿ þ���øúü� ûÿù ìÿ��þùüþ��ÿù � ý�� �ø ý����ìÿúùþýú ûÿ ÿù ÿ��ÿ��ù ÿü �ø��ýû�üþýú û ��úÿ ÿ���þøüþýú ��� ù ø���ý��þ�ÿ � Üþÿú ��ÿ � �ÿ�ý�ü ùýþü þúü��ÿùùøúü ÿü �ý�ø��ÿ þ� úÿ úý� ù ùÿ���ÿ�øù �ý��� ÿúü ��ûþþÿ�� û �ÿùùøiÿ� ûÿ ý���ÿúû�ÿ �ø �ý �ýúü� û� ��ý��ø��ÿ�� � ý�� üÿúüÿ� ûÿ �� þ þúûþ��ÿ�ùÿù ÿ��ÿ��ù � � �ÿúü�ÿ� ²�ÿ� ÿúü û �ÿ��ÿ��ù � ÿ�ü ²ü�ÿ ûþ¢ þ�ÿ � û�üÿüÿ� � �ÿù � ÿùùø�ÿù ø�ý�ù ý�üÿú� ù úÿ ùýúü �øù�ý��� ÿúü � ÿø�ý�� ��� ù �øþ�ù � ý�� �ú û���üøúü �ç� � ÿüþ�ÿ ø� � ø � øþúüÿúøúü �ú ùiùüí�ÿ ûÿ üi� ÿù ý���ÿ�ÿ ûÿ �ø� � �þúü�ýû�üþýú ûÿù ý� � ÿüù � ÿü ûÿù"�c!��\ � ý �i� ý��ìÿù � çú � ÿ�ü �ÿ �þ� þüÿ� � ùýú úýiø� �ýúüþýúúÿ� ÿü þ�� ��øüþ� æ �øþù � �ýú �ÿúýúü�ÿ û�� �ûÿù ûþ¢ ��ü�ù �þ�ÿù ø� üi�ø�ÿ ûÿù ü�øþüù þ�� ��øüþ�ù ]N~g ^ � �ø úýú ��ú��ø�þùøüþýú ûÿ � �ø���þøüþýú �øþü �ìý�ÿ�� �þú���ÿúÿ ûÿ üi� ÿù ûÿ ��ý��ø��ÿù �ýúüþýúúÿ�ù üý�ü � �øþüù ý��ÿüù ùøúù � �þúü�ýû�üþýú ûÿù �ø�þø��ÿù ûÿüi� ÿ �øþ��ÿù � ¥ �ø�ü�ÿù ùiùüí�ÿù � ÿ��ÿüüÿúü ûÿ ü�øþüÿ� �ÿù ü�øþüù þ�� ��øüþ�ù ùøúù �þ� þüÿ� �ø �ø�üþÿ �ýúüþýúúÿ��ÿ æý��ÿ û��þüù ûøúù ]~Ä^ æ �øþù �ÿ�� þ���øúüøüþýú ÿùü �ý�ü ý���ÿ�ÿ ÿü � ý���øþü ú� þ�ÿ � � �ÿ¢ øþü� û� üi� ÿ�� �¡ÿ�üî²ü�ÿ �ø�üîþ� ø�ý�ù �ÿýúùþû��ÿ� � �þú���ÿúÿ ûÿ üi� ÿù � ý�� �ÿù û���üøúüù ÿü úÿ ýúùÿ��ÿ� ��ÿ �ÿ üi�ø�ÿùüøüþ��ÿ � J� ��ý��ø��ÿ�� ûÿ úý��ÿ� �ÿù üi� ÿù ûÿ ìø��ÿ û��ø�øüþýú ý��ÿ �ÿù �ýúüþýúù ÿü ùÿù �ø�ø� íü�ÿù æ

�­ ¨ðñ�òí#ìîðïíò ï ìîïðñìë èò� §íî� òî © éîïòí� ��¯ ðñòóÉÆôòÈõ öÈò÷ñÈ÷ ÊÌ Æò Éø Ê ùòÉÅôúñóÉôÅË ûôüÄ ñÉÆò÷ ûñÅÅÆóñ õñü ��¼{{{ «�� ! «�� !!�-� «/%�¿&+� !��-#�8ý"þ6 V�8ý"þ6V «T � R�¾{{{ «��/+�Ï «�� !!�-� «/%�$-�S�ÁÂÂ��� �#!�� �#!�#���� R�&���$-� «�T��Ã{{{ «$%!&T-� - «+%S��Î{{{ «&! «�� «�R�T-R���

Page 113: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

N�G jklmnopq � r qs wqn�sqvqs o

ý� �ÿù �ø�þø��ÿù �ý ø�ÿù � çú � ÿ�û �úÿ �ø�üþÿ ûÿ � �����øúÿ û� �øú�ø�ÿ ÿ øþù �ÿ �øþü û ���þ�ÿ ùýþîÿ ²ÿ ÿ �ÿù üi� ÿù�ý�ÿ �ÿ ��ý��øÿÿ ÿ�� � �úÿ ÿ�üøþúÿ øüüÿúüþýú ÿü ùþÿ��þ© ÿ �ø ���þ©øüþýú û� ��ý��øÿÿ ÿ � çú � ÿ�ü ø�ý�ù ��� ù�øþ�ÿÿ ÿúü �ÿ�þÿ� �ÿù ÿ ÿùùø�ÿù û �ÿ��ÿ�� ø�� üi� ÿù û�©úþù �ø� �ÿ ��ý��øÿÿ ÿ�� � ý� ù i �ÿ� þÿúû�ýúù ûøúù �øýú�� ùþýú ûÿ ÿ ÿ �ÿ ýþ�ÿ �ß[ Y ê]\ä_^àX¼½[ ß[ Y ê[¼W ]^_¼¼[\[¼à �� ÿ øú��ÿ û �ø�ü�ÿ �ø�ü �ú ÿú� þ�ýúúÿÿ ÿúü ýú� þ� þø� � ý�� �ø ��þùÿ ÿúÿ øþú û� û���üøúü � �ø ÿ øúþí�ÿ ûÿ ¥ ��ìÿÿ ÿ ý� û �� ÿ�þ�ÿ � ¤ú �øþü ù�� �ÿù ��øüÿùî�ý�ÿ ÿù Cúþ� L� þú�� æ �øç�� M� ��üþ�þùøüþýú û �¤ÿ øù ¶Õ �øúxøúü �ÿ \a� Zâ"âZ ÿú þúüÿ�úÿ ÿùü ��ÿù��ÿ ýú�ý�üø��ÿ � �� ÿ øú��ÿ �úÿ ÿ���üþýú �øù ��øù � ÿ�ÿ ÿüüøúü ûÿ ù� þ��ÿ � �ÿ���üþýú û� ��ý��øÿÿ ÿ � ¡ø� ýúü�ÿ ùý� ù � þúûý� ù � �ø� ùÿúÿ û ��ú ÿú� þ�ýúúÿÿ ÿúü���ÿ� øÿ�üøúü �ÿ ý� þÿ��ý ��ÿ� ùÿ �øþü ��ÿ��ÿÿ ÿúü ùÿúüþ� � ýÿÿ ÿ ÿ ùiùüíÿ ÿ ÿùü � þÿú ùý��ÿúü �üþ�þù� � ý�� �ÿùý��ù û���üøúüù ý� �ÿù ü�üý�þø�� æ �ú ÿ�ý�ü ÿùü � ÿ�ÿü�ÿ� ûÿ �ø �ø�ü ûÿ �ø ýÿÿ�úø�ü� ç� � ÿüþ�ÿ øÿ� �� ) � � -+6 6 3 .9,�9�3 0/88 +57

�ÿù ��ù� ù �úþ�ÿ�ùþüøþ�ÿù ÿú þú�ý�ÿ øüþ��ÿ ýúüþÿúúÿúü �ú � ýú �ýúû �øùùþ��ÿ � çú �ÿü�ý��ÿ �ú ÿ�üøþú úýÿ��ÿûÿ ÿ ýû��ÿù ��� þ�ø�ÿúüù ûøúù � � ÿ� ��íù üý� ù �ÿù �üø��þùùÿÿ ÿúüù � ¡ø� ÿ�ÿÿ��ÿ �ÿù ý��ù û �ø��ý�þüìÿ þ��ÿ æ ûÿýÿ� þ�øüþýú æ ûÿ ù�ÿ øúüþ��ÿ ÿü ��ÿ��ÿù æ ûÿ ��úþÿ �ý�þþÿ� æ û �ø�ì þüÿü��ÿ ÿ øü��þÿ��ÿ æ ûÿ ùiùüíÿ ÿù û �ÿ���ýþüøüþýú æûÿ �ø�ø����þùÿ ÿ æ û �þú�ý��ø�ì þÿ æ ûÿ �øùÿù ûÿ ûýúú�ÿù æ û ��J æ � � �� ÿ��ÿúü ²ü�ÿ ýúùþû���ù ýÿÿ ÿ �� ù ûøúù �úÿ�þÿúÿ ý� �ú ÿ øùüÿ� û �þú�ý�ÿ øüþ��ÿ � ¨ ÿ�ø ùÿ �ø� ý�üÿ ûÿù ý��ù ��� ù �ø�üþ��þÿ�ù æ ýÿÿ ÿ �ÿ üÿÿ� ù ��ÿ� æ �ø��ý��øÿÿ øüþýú �ø� ýúü�øþúüÿ æ ÿü �çú û�ý�� ÿ ÿù ûþ� ��ÿúüù ý��ù ÿú ü�ýþù �ø�üþÿù � �ø ��ÿÿ þí�ÿ ý��ÿù� ýúû ø�� ý��ù ýÆ �� ù �þúüí��ÿ �øþî�ÿÿ ÿúü � �ø ûÿ�� þíÿ ÿ ýúüþÿúü �ÿù ý��ù ýÆ � � ùÿ ûýþü û �þúü���ÿ� ûÿ úý��ÿ��ÿù �ýúüþýúúø�þü�ù � ý�� � ý��ýþ�i ��� ýúû�ÿ � �ø ü�ýþùþíÿ ÿ û��þü �ÿù ý��ù ýÆ � � ú �ø ��ÿ � ÿ� ûÿ � ýþúüù ýÿÿ�úù ÿü ýÆ � �þúü��²ü ûÿ � ��üþ�þùÿ�ùÿÿ��ÿ �øþ��ÿ �� Ͷ Í� � ÒØ¡ ØÓÐÔ Ò Ñ × Ô �ØÓÕ�¤ÖÐ

�ÿù ��øü�ÿ ûýÿ øþúÿù ù� þ�øúüù ø��ý�þüìÿ þ��ÿ æ ýÿ� þ�øüþýú æ ýú���ÿúÿ ÿü ��úþÿ �ý�þþÿ� ùýúü ��ý� þÿù �� ��üþ�þùøüþýú ûÿ �� �� YÙ_^]àÚ\ ]ÜZ[

�þ � �ýú ùÿ ���í�ÿ � ûÿù ý���ø�ÿù �øùùþ��ÿù û �ø��ý�þüìÿ þ��ÿ ýÿÿ ÿ ]~^ ý� ]NGd^ þ� ÿùü �ÿ�øüþ�ÿÿ ÿúü �øþ�ÿûÿ ���ùÿúüÿ� �ÿù ûþ� ��ÿúüù ÿ ýûí�ÿù ûÿ ûýúú�ÿù û��þüù ûøúù ÿü ý���ø�ÿ ÿú � � æ ùýþü ûÿ ÿ øúþí�ÿ þÿ� ��øüþ�ÿýÿÿ ÿ ûøúù �ÿ�� ���ùÿúüøüþýú ý�þ�þúø�ÿ ùýþü ûÿ ÿ øúþí�ÿ �ýúüþýúúÿ��ÿ � ¡ø� ÿ�ÿÿ��ÿ �úÿ ùü��ü��ÿ ûÿ ��ø�ìÿù� ÿ�ü ²ü�ÿ ��ø�þù�ÿ ûÿ ÿ øúþí�ÿ þÿ� ��øüþ�ÿ ùýþü �ø� �ú üø��ÿø� û �øû� øÿúÿ æ ùýþü �ø� �ú üi� ÿ ����ùþ� ÿ�üø��ÿ �íìô�ò� � #òí�ïðñ �% ���- �� S���T 56 �R ÷6��� �/ �� � �� S���T R��� ��/ ������ S���T ��/���� «% 6��� �� «PÐ � ��/ 34 � ��� & /R��� S���T 5 6��� �� � ��/ 34 �

�íìô�ò� � #òí�ïðñ �% ���� ���� 5 6�� ÷ 9��� �/ /R��� ��% ���� � ������ 5 ���� ����� ����� ��% ���� �� S���T� 5 . ����� R� ��� & ��� ����RR� & ��� ����� ��� & �� ����� �� & � ������ ; ��ý� ûÿ ÿ øúþí�ÿ �ýúüþýúúÿ��ÿ ÿú �üþ�þùøúü �úÿ �þùüÿ û �øùùý þøüþýú �� þ þúûþ��ÿ �ÿù ù�ÿùùÿ��ù û ��ú ú��û �íìô�ò � #òí�ïðñ �

% ���� �� S 55 ���� � �� � �� S R��� � ������ S ��/���� «% ��P �� «PÐ �34 � & /R��� S � ��� & ��� � /R��� � /R��� S R��� 5 P � � «PÐ � 34�ø ùþÿ��ÿ ý� þÿ ûÿ ��ø�ìÿ ûþ� í�ÿ ûÿ ÿ øúþí�ÿ þÿ� ý�üøúüÿ ùÿ�ýú �ø �ÿ���ùÿúüøüþýú ìýþùþÿ ��Ý{{{ «S�� «��S���/�{������ ������ ��� «T�� R

Page 114: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r r v z juvvq zls �l�q w �mm upo N�~!_\ä ]YXà]_¼

�ÿùü ��ý�ø��ÿÿ ÿúü �ÿ ý��ù ýÆ � ��üþ�þùøüþýú û �ç� � ÿüþ�ÿ øÿ� ýÿÿ ÿ �øú�ø�ÿ û �þÿ��øúüøüþýú ÿùü �ø ��� ùþúü��ÿùùøúüÿ � � � ÿùü �ø�üþ��þí�ÿÿ ÿúü ø���ø��ÿ � ý�� �ø ÿ øúþ���øüþýú û �ø���ÿù � �ø ýúùü��üþýú û ��ú ø���ÿ ûÿùiúüø�ÿ ø� ùü�øþüÿ æ ùýú ��ø��øüþýú ý� ùÿù ü�øúù�ý�ÿ øüþýúù ùýúü ø�ý�ù ýúþùÿù � ¡øù � ÿùýþú ûÿ ÿ ýûí�ÿ ý� � ÿü ¿¹ þîùþüÿ��À ]eÄ^ � ý�� ûÿ üÿ�ù ø�� �ù � ç� � ÿüþ�ÿ øÿ� ��ý� ýùÿ ûøúù ùø ûþùü�þ��üþýú ûÿù ý�üþ�ù � ý�� �ø ýúùü��üþýúûÿ ��øÿÿ øþ�ÿù � �ÿ ý���ÿ @£"ÊÊ#� ÿü @£" Êä£@@ � ÿ�ÿ ÿüüÿ ûÿ û�©úþ� ûÿù øúø�iùÿ��ù øùÿúûøúüù L�J� LNM¸Ö M� �ø ÿ øúþí�ÿ ûÿ Ê#� ÿü ä£@@ � � �þúü��²ü ÿùü ø�ý�ù û �ø�ýþ� �ú øúø�iùÿ�� üi� � ùüøüþ��ÿÿ ÿúü � �øþù ç� � ÿüþ�ÿøÿ� ��ý� ýùÿ ø� ùùþ �ø ýúùü��üþýú û �øúø�iùÿ��ù ûÿùÿúûøúüù ÿú �üþ�þùøúü � �ý�üþ� @£"Êå$ � ý�� ûÿù �øùùÿùû �øúø�iùÿ��ù �ç�� ¸ ¶ � ¥ÿ ��� ù �ÿ ÿ ýûí�ÿ �ýúüþýúúÿ� � ÿ�ÿ ÿü ûÿ ýúùü�� þ�ÿ û��øúü � �øúø�iùÿ ùiúüø� þ��ÿ û ��úüÿ� üÿ ûÿù �ýúüþýúù û �øúø�iùÿ ûÿ �ø ù� þüÿ ûÿ ÿ üÿ� üÿ � çú � ÿ�ü ø�ý�ù û�©úþ� ûÿù ��øÿÿ øþ�ÿù ýúüÿ� ü�ÿ��ÿù � ÿùøúø�iùÿ��ù ùýúü ø� ùùþ �üþ�þù�ù � ý�� �ÿù ø¢ ìÿ��ù ]N�~ ^ � �� ÿùü þúü��ÿùùøúü ûÿ � ý��ýþ� ýÿ�ø�ÿ� ÿù ûþ� ��ÿúüùüi� ÿù û �øúø�iùÿ��ù �¡ �� ùþÿ��ù ý��ù ûÿ � ��úþ�ÿ�ùþü� ¡ø�þù e �üþ�þùÿúü û �øþ��ÿ��ù ç� � ÿüþ�ÿ øÿ� � ý�� ÿ�ø � �ÿ ý��ù ý�üþýúúÿ�¿¡ �ý� ÿüÀ û� ¥¤CB ��J � ��ý� ýùÿ � ý�� ûÿ�� ��ý�� ÿù ûÿù ��ý� ÿüù ú�ÿùùþüøúü �úÿ øúø�iùÿ ùiúüø� þ��ÿ �ÿ��ý� ÿü ¿þúüÿ���íüÿ ÜJ ��À ú�ÿùùþüÿ ûÿ ýúùü�� þ�ÿ �ú øúø�iùÿ�� ùiúüø� þ��ÿ � ý�� �ú úýiø� ûÿ Üøùþ � �ÿ ��ý� ÿü¿�iùüíÿ ÿ ûÿ B ÿùüþýú ûÿ Üøùÿù ûÿ ¥ýúú�ÿù  ��ø�üþÿùÀ �üþ�þùÿ �ú øúø�iùÿ�� ûÿùÿúûøúü � ý�� �ú ÿ þú þî��� � �ÿý��ù ûÿ ýÿ� þ�øüþýú ûÿ � þÿúÿ ø ��þù J�� � ÿúûøúü ��� ùþÿ��ù øúú�ÿù ýÿÿ ÿ �øú�ø�ÿ ù��� ý�ü � ç� � ÿüþ�ÿøÿ� �üøþü ÿúùÿþ�ú� ø��ø�ø�øúü ûøúù �ÿ ý��ù ûÿ ¿¡ �ý��øÿÿ øüþýúÀ ûÿ �þÿúÿ � �ø ÿ ýûþ©øüþýú ûÿ ÿ ûÿ�úþÿ�ø ÿúü�ø�ú� � �ø�øúûýú û �ç� � ÿüþ�ÿ øÿ� ø� ��ý©ü û �Jûø ÿü ûÿ �çú � ÿ�ü ýÿ�ø�ÿ� � �þúü��²ü ûÿ � � ÿü ûÿ ýÿÿ ÿ �øú�ø�ÿ ù��� ý�ü ÿú �þùøúü �ÿù �þ��ÿù û �Júû�ÿ� J�� ÿ� ù���ÿù ýÿ� þ�øüÿ��ù ÿ ýûÿ�úÿù ]Nf æ NN^ æ �� þ ÿ ýúü�ÿúü �úÿ þÿ��øúüøüþýú ÿú � � ÿü �úÿ ø�ü�ÿ ÿú L�úÿ ü�ýþùþíÿ ÿ�ÿ�ùþýú �üþ�þùÿ ³ø�øM � �ÿ ý��ù ¿ýÿ� þ�øüþýú J�øú�ÿÀ ûÿ ÿ ø�ü�þùÿ �üþ�þùÿ ç� � ÿüþ�ÿ øÿ� ýÿÿ ÿ �øú�ø�ÿù��� ý�ü �çú ü�ý��ÿ ûÿ úýÿ��ÿ�� ù��� ý�üù ûÿ ý��ù �üþ�þùøúü ç� � ÿüþ�ÿ øÿ� ý� �üøúûø�û �� ûøúù ûÿù ý��ù þúü�ýîû�üþ�ù ÿü ø�øú�ù � ¤ú �ýþþ ��ÿ���ÿù ÿ�ÿÿ��ÿù �ÿù ý��ù ûÿ ýÿ� þ�øüþýú ûÿ � ��ý �ÿ � ý �iüÿìúþ��ÿ ¿�øú�ø�ÿùÿü ýÿ� þ�øüþýúÀ ûÿ ¥ þûþÿ�  �ÿi¸¸ ÿü ¿ýÿ� þ�øüþýúÀ ûÿ �� �ø�øú�ÿü¸· æ �ÿ ý��ù ûÿ ýÿ� þ�øüþýú ûÿ ÿ ø�ü�þùÿûÿ ¡ø�þù Ä ûÿ Âý� ÿ�üý ¥ þýùÿ ý¸´ æ �ÿ ý��ù û �ç�þ� þÿ� ¥øú�i¸µ � � ��úþ�ÿ�ùþü� û �Jø�ì� ù � �ÿ úýÿ��ÿ ÿü �ø ��ø�þü�ûÿù �ÿùùý��ÿù �øþ�ÿÿ ÿúü øÿùùþ��ÿù ÿ ýúü�ÿ � þÿú �ú þúü��²ü üý�� ý��ù �ý�ü ûÿù ÿúùÿþ�úøúüù � ý�� � ��üþ�þùøüþýúûÿ � � ûøúù �ÿ�� ý��ù ûÿ ýÿ� þ�øüþýú �!_¼½Z^^[¼½[

¥øúù �ÿ ý��ù ¡f¸µ æ üý�� ý��ù ÿú ÿ ø�ü�þùÿ ûÿ ¡ø�þù e æ úý� ù ýÿ�ø�þýúù �ÿù ÿ �øúþùÿ ÿù ûÿ ýú���ÿúÿûøúù �ÿù �øú�ø�ÿù ç� � ÿüþ�ÿ øÿ� ÿü ³ø�ø � � �þúü��²ü û ��üþ�þùÿ� ç� � ÿüþ�ÿ øÿ� ÿùü ûÿ ÿ ýúü�ÿ� ÿú øüþýú ûÿ��ÿ ýûí�ÿù ûÿ ýú���ÿúÿ �ÿ ÿ ýûí�ÿ ûÿ ÿ �ÿ ýþ�ÿ �ø�üø��ÿ ��ø�þù� � �øùÿ ûÿ ù�ÿ ø�ìý�ÿù � ý�� ûÿù ��ý ÿùù� ù���ÿ�ù ÿü �ú ÿ ýûí�ÿ ûÿ ÿ �ÿ ýþ�ÿ ûþùüþúüÿ ø�ÿ ùiúì�ýúþùøüþýú ûþ�ÿüÿÿ ÿúü þúù� þ�� ûÿ � � ]Nfg ^ � ÿ ûÿ�úþÿ�ÿ ýûí�ÿ � ÿ�ÿ ÿü û �ÿ� ÿü�ÿ� �ÿ �øùùø�ÿ ø� ÿ ýûí�ÿ � ÿ �ÿ ýþ�ÿ ���ø�üþÿ þ��� ùü��ÿ �ø� �ÿù ��þùÿù ûÿ ýÿÿ�úþøüþýúL aXpâ\ M ûÿù ��ýüý ý �ÿù C¥¡ ��¡ ÿü K¡ ��¡ û� ��ùÿø� �úüÿ�úÿü � ¥ÿ ÿ ²ÿ ÿ �ÿù úýÿ��ÿ� ùÿù ÿ�üÿúùþýúù �ø�ø��í�ÿùûÿ � � � ÿ��ÿúü ²ü�ÿ ýÿ�ø��ÿù L�ýþ� �ø�ÿ N�eM �%Þ¼][ Y_Ù ]½ ][Y

Ü þÿú ��ÿ �ÿù �ø�� ý�üù ÿúü�ÿ ��úþÿ �ý�þþÿ� Lrae \k �câ F�g !� ââc!�gM ÿü ùþÿúÿ þú�ý�ÿ øüþ��ÿ L�aY� f\âcr X!â�XâM ùýúü üý�� ý��ù û �øü�ø�þü� ]NN~^ æ ýú �ÿúýúü�ÿ �ÿ ��� ù ùý��ÿúü �ú üÿ� ý��ù ûøúù �ú ��ù� ù �úþ�ÿ�î¦Þ öôô&Èø ÊÈú öÊ' É Éô ( Æ÷ø É ) ÈÅÌÆò÷ �¦ �* Æ÷ø +ÅúÊÅ öö ,öÊ' É-Éô-ÅÆ÷ø É ÄÈÅÌÊ. öÊ' Éü ôÌÉ úÊÅÆÇÈÉÆôò/ �¦¦ ������R «����� «0��¿������ �R������ �R�¦­��� �RR�� «����� «0��¿� ����S���1����� �R�¦¯{{{ «�� � «�� ����� «0��¿������ ��9�����6�����9��� �R�� ���¦¼{{{ «���� � «�� «�õ �¿���� �����2� Â��¦¾�íð�íì�� ìîïðñ ¨ðñê�ííòñîò 3 éìêîï#ò òî 3 éôìíîïò ª{{{ «��0��Ï «�� ����� «0��� ��������ÁÂÂ���RS����S�� �Á����� R���¬ �

Page 115: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

N�e jklmnopq � r qs wqn�sqvqs o

ùþüøþ�ÿ û �þú�ý�ÿ øüþ��ÿ � Cúÿ �ø�ü þÿ� ý�üøúüÿ û� ��úþÿ �ý�þþÿ� ùÿ �øùÿ ù�� �ÿù üi� ÿù ø� ùü�øþüù ûÿ ûýúú�ÿù ÿüù�� �ÿù ùiùüíÿ ÿù ûÿ ÿ ýû��ÿù � ¥øúù ]H� ^ ÿù üìíÿ ÿù ùýúü �ø��ÿÿ ÿúü û��þüù � �� ùÿÿ��ÿ �øþ� ��ÿ �ÿ ùiùüíÿ ÿ�� þùùøúü ûÿ ÿ ýû��ÿù ûÿ �� �� ³ ý� û �ç� � ÿüþ�ÿ øÿ� ÿùü ��ý� þÿ � �ø ýúùü��üþýú ÿ ýû��øþ�ÿ ��ú��þ��ÿû �ø���þøüþýúù � ÿ �� þ � ÿ�ü ²ü�ÿ ��ù�ÿ � �ø� �ÿ ù�ý�øú ¿4 !g` âc[acbâc 5 i aZdY ac� `!X 6 7 âf �nZâÀ ûÿ ]N8g ^ �¡ÿ� ûÿ ÿ �üìýûý �ý�þÿù ûÿ û��ÿ�ý�� ÿÿ ÿúü ýúü �ü� ��ý� ýù�ÿù � ý�� �ÿù �øú�ø�ÿù �ýúüþýúúÿ�ù æ ýú � ÿ�ü þüÿ�]Nd N^ �� þ û�©úþü �úÿ qf�X\!a��Z l��Zd ! ��b E â !g� y â\` abaZagd LqlE M þúü�ýû� þùøúü �úÿ úýüøüþýú ��ø�ì þ��ÿ� ý�� �ø ýÿ� ýùþüþýú ÿü � ý�� �ø ÿ ýû��þùøüþýú � qlE ÿùü ý�þÿúü� �øú�ø�ÿ �ýúüþýúúÿ� ��� ùüøüþ��ÿÿ ÿúü üi� � ��ø � øùËÿ�� �� Ͷ Ͷ 9סÓÙ Ñ × ¡ Ó ÐÔÒØÓ Ù �ØÓÕ¸¤ÖÐÖ Ù �¡×ÕÖÐÔ ÕÖ¡ ØÕÔ

¡ý�� �úÿ ø�ü�ÿ �øùùÿ ûÿ ý��ù æ � �� ù û�� ÿúûøúü ûÿ � �þúüÿ�ý� ��ø� þ�þü� û� �øú�ø�ÿ æ ýÿÿ ÿ �ÿù ý��ù ûÿùiùüíÿ ÿù û �ÿ���ýþüøüþýú æ ûÿ �ø�ø����þùÿ ÿ æ û �þú�ý��ø�ì þÿ æ ûÿ ��ý��øÿÿ øüþýú ø�ÿ ýúü�øþúüÿù æ � � ú �ÿùü �øù�øþ�ÿÿ ÿúü �üþ�þùø��ÿ ùøúù ûÿ úý��ÿ��ÿù � þ��þýüìí��ÿù ý� ûÿ úý��ÿ��ÿù ÿ� üÿúùþýúù û� �øú�ø�ÿù æ �� þ ûýþ�ÿúü�ø�ûÿ� �ÿù ��ý��þ�ü�ù ûÿ üi�ø�ÿ ûÿ �� � ¡ �� ùþÿ��ù ûÿù ÿ� üÿúùþýúù ���ùÿúü�ÿù úÿ ù �þúüí��ÿúü �øù ýÿ��íüÿÿ ÿúüûøúù �ú ùiùüíÿ ÿ ûÿ üi� ÿù ÿ� þùüøúü �º :;Ù:<==<à >;¼ ä<:<??@ ?A

� � ú �ø �øù �ü� ýúx� þú þüþø�ÿÿ ÿúü � ý�� �ÿ �ø�ø����þùÿ ÿ ý� �ø ���ø�üþüþýú æ ú�øúÿ ýþúù �úÿ ü�ý��ÿ �úÿ ��øúûÿ�þìÿùùÿ û �ÿ�üÿúùþýúù � �ø ��þúþ�ø�ÿ ûþ¢ ��ü� ��ý� þÿúü ûÿù ýúü�øþúüÿù ûÿ üi�ø�ÿ ûÿ �ø ýÿÿ�úþøüþýú � çúü�ý��ÿ ûþ� ��ÿúüÿù ÿ� üÿúùþýúù ûÿ � � �� þ þúüí��ÿúü �ú ûÿ ÿù �ø�øûþ�ÿ ÿù ýÿÿ ÿ ´øþ�ÿ ]Ä�^ æ ýú��ÿúü� � ]Bfg^ æ ¥þùü�þ��üÿû �� ]gd^ æ �ø�ø� � ]BÄ^ æ �� ]Bg^ æ øÿ�î´� þ�ìü ]ef^ æ Ü�� � �Ü ]ÄÄ^ æ çøÿ�¡d� ]~ B^ æ³ýøÿ� ]8~ ^ �çú � ÿ�ü û��þ�ÿ �ø� þûÿÿ ÿúü �ÿù ûþ� ��ÿúÿù ûÿ ÿù ùiùüíÿ ÿù C<½ >?A D !E ' D '!å é �ø�ø����þùÿ ÿ ûÿ ýúü���ÿ � ��øþú ©ú æ ÿ �ÿ ýþ�ÿ �ø�üø��ÿ æ ��øüþýú ûÿ ��ýÿùù� ù æ ���úÿîÿ ÿúüù ûÿ ùFúì�ýúþùøüþýú Gûÿù�þ�üþýú ýÿ� ý�üÿÿ ÿúüø�ÿ þúù� þ��ÿ ûÿ � � ý�� �� ÿü ´øþ�ÿH æ � ÿ�ÿ ÿü� ���þü��ÿ ûÿ ��ýüý ý �ÿ æä<:<E ' é þú��ü �ø ��øüþýú ûÿ ��ý ÿùù� ù � ý�� ù��� ý�üÿ� �ú �ø�ø����þùÿ ÿ � ��øþú ÿ ýFÿú æ!<= ?IC' >ÙÚà é �ø�ø����þùÿ ÿ ûÿ ûýúú�ÿù � ��ýù ��øþú æ ÿ �ÿ ýþ�ÿ ûþùü�þ���ÿ æ �øù ûÿ ��øüþýú ûÿ ��ý ÿùù� ù æÿ �øúþùÿ ÿ û ���ø��øüþýú � ûþùüøúÿ æ �øù� ù�� �ú ��ýüý ý �ÿ �J åE 'KJ é ]ÄÄ^ � ý�� �ú ø�� � û� ý¹ü¸º �L!<= ?ºM' é � ý�� �ø ýÿ� ýùþüþýú ûÿ ù��ÿ�ÿüüÿù �ø�ø��í�ÿù¸» �N;!<= ? é � ý�� �ø ÿ ý� þ�þü�¸Õ �

Oý�üÿù ÿù ø���ýìÿù ýúü � ÿ� ÿú ýÿÿ�ú � ¤ ��ÿù � ÿ�ÿ ÿüüÿúü ûÿ û�ÿùùÿ� �ú �øúý�øÿ ø øùùÿà þÿ� ý�üøúü ûÿùÿ� üÿúùþýúù �ø�ø��í�ÿù ûÿ �� ÿü ûÿ �ÿù ýÿ�ø�ÿ� �%:<äÚ >¾=A Aà >¼àA:»<½A¾

ÿ ý��ù ùÿ û�ý�� ÿ ÿú ��ú��ø� ÿú ûÿ�� �ø�üþÿù �ø ��ÿÿ þí�ÿ ýúÿ�úÿ �ÿù ÿ ýûí�ÿù ��ø�ì þ��ÿù ÿü �ø ûÿ�� þíÿ ÿ�ÿù þúüÿ��øÿù ��ø�ì þ��ÿù � ¥øúù �ÿ ��ÿÿ þÿ� øù � �þúüÿ�øüþýú ú �ÿùü �øù ý��þ�øüýþ�ÿ � çú ü�ý��ÿ�ø ûøúù ]P~^ �úÿûÿù�þ�üþýú û ��úÿ � þ��þýüìí��ÿ ��ø�ì þ��ÿ � ý�� �ø ýúùü��üþýú û �þ��� ùü�øüþýúù þÿ��øúüøúü ûøúù �ú ùüF �ÿ �ýúîüþýúúÿ� �ÿ ÿ ýûí�ÿ ��ø�ì þ��ÿ ûÿ ¡ýùü��þ�ü � � �þúü��²ü þþ ú �ÿùü �øù �� ùüÿ ûÿ û��þ�ÿ ûÿù ø��ý�þüìÿ ÿù ��ø�ì þ��ÿùÿú � � þÿ� ��øüþ� ýÿÿ ÿ ûøúù ]BPQ^ ÿ øþù ûÿ ÿ ýúü�ÿ� � �ø�� ý�ü ûÿ �ø ��ý��øÿÿ øüþýú �ýúüþýúúÿ��ÿ ûøúù �ø��ý��øÿÿ øüþýú ��ø�ì þ��ÿ �¦Ã0 «R�� R��S�� «0��� «0��¦Î{{{ «�� � «�� ����� «0��¿������ ��T����� �U�U�� ���À|T|�VW|�XÀ�X�Y� � «�� «�� �� � «�������� «U�� R¦Ý��� �RR�� «����� «0������� R�

Page 116: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r� r v z m u�p zqw Z �opqw xnw[nmznsqw B�Äç� � ÿüþ�ÿ øÿ� ÿùü ûþùü�þ��� ø�ÿ ûÿ�� � þ��þýüìí��ÿù ��ø�ì þ��ÿù �\£å] A@? ÿü @£" Êã� �ýúüþýúúøúü ùý� ùûþ� ��ÿúüù ùF ùüíÿ ÿù ûÿ �ÿú²ü�ÿù G� þúûý� ù æ �øç�� æ ÿü � î� þúûý� H � �\£å] A@? ÿùü øùùÿà ÿ þú þÿ ø�þùüÿ æ úý� ù F�ÿ� þÿúû�ýúù ø� ìø� þü�ÿ ^ � �ø � ý�üÿ � ý�üþ�ù G�þ�ÂOH ÿùü �ú ý�üþ� ûÿ ��� ù ìø�ü úþ�ÿø� �øù� ù�� �ø � �þ� �� þ � ÿ�ü²ü�ÿ �üþ�þù�ÿ � ý�� ���ùÿúüÿ� �ÿ ùF ùüíÿ ÿ � î� þúûý� � ¥ÿ ÿ ²ÿ ÿ �ø � þ��þýüìí��ÿ ÿ� ÿúÿ ûþùü�þ���ÿ ø�ÿ ýú���ÿúü

� � ÿùü ÿ��ÿ ø� ùùþ �ú øúûþûøü � �ø ýúùü��üþýú û �þúüÿ��øÿ ø� ûÿùù� ù ûÿ � � �ýú þúü��²ü ��ý� þÿúü ûÿ �ø ��øüþýúûÿ ��ý ÿùù� ù ���ÿ�ù � ý�� �ÿù �ÿú²ü�ÿù �� þ ûýúúÿ �ÿù � ýúù ý�üþ�ù � ý�� ýúùü�� þ�ÿ �úÿ þúüÿ��øÿ ýú���ÿúüÿ �åë¾à@=A

�ÿ ý��ù ù�� �ÿù ùFùüíÿ ÿù û �ÿ���ýþüøüþýú û��þü ûÿ ÿ øúþí�ÿ ���þùÿ �ÿ úýFø� û ��ú ùFùüíÿ ÿ æ ÿú ��ú��ø� �ÿùF ùüíÿ ÿ Cúþ� � �� ÿùü �øþ� ��ÿ �� ú �ø �øù �ü� ýúx� � ý�� ÿ�ø æ ÿ øþù �þÿú úÿ � �ÿÿ�íìÿ ûÿ � �þúüÿ��øÿ� ø�ÿ�ø � þ��þýüìí��ÿ ùF ùüíÿ ÿ û� ý��ù ýÿÿ ÿ �ø� ÿ�ÿÿ��ÿ ÿú ]_~^ � ÿ � ý �Fý� þ� ���ùÿúüÿ �ø ��ý��øÿÿ øüþýú û�ùF ùüíÿ ÿ Cúþ� � �ø�üþ� ûÿ øÿ�î�þ�ìü � Cú ý��ù ù�� �ÿ ùFùüíÿ ÿ û �ÿ���ýþüøüþýú Cúþ� ø �ü� ûýúú� � � ��ý �ÿúý�ÿ ø�ÿ ù�� ��þÿ��ÿ �ø� � ø� þÿ� �ÿ�ýF ÿú øÿ�î� þ�ìü ÿü ÿú � � �¤ � � ¥þûþÿ�  �ÿF·Ö �øùÿ ùýú ÿúùÿþ�úÿÿ ÿúüùF ùüíÿ ÿ � � ��ý �ÿ � ý �Füÿìúþ��ÿ ù�� ç� � ÿüþ�ÿ øÿ�

�ÿ ��ý� ÿü ´ý� ÿü· ¶ ]Ä_^ ÿùü �úÿ þ��� ùü�øüþýú ýúù���ÿúüÿ ûÿ ��ý��øÿÿ øüþýú ùFùüíÿ ÿ � ý�� � ���þü��ÿ ûÿýúùü��üþýú ûÿ ùFùüíÿ ÿù û �ÿ���ýþüøüþýú ÿú �ø�üþ��þÿ� û� ��ýüý ý �ÿ O¡ ��¡ ÿü û �ø���þøüþýúù ��ùÿø� ��� ÿùü �øþ� ú�øúÿ ýþúù ��ÿ �� ø ��ÿ���ÿù �ø�úÿù ûÿ �øù úþ�ÿø� � ý�� �úÿ ��ý��øÿÿ øüþýú ùF ùüíÿ ÿ Gýÿÿ ÿ

�ø� ÿ�ÿÿ��ÿ �ÿù ìøÿ� ù ûÿ � þüùH � ¡ø� ýúü�ÿ � �þúü��²ü ûÿ �� ûøúù �ø ýúùü��üþýú ûÿ ùF ùüíÿ ÿ � þÿúü ��þúþ�øî�ÿÿ ÿúü ûÿ ùýú ùF ùüíÿ ÿ ûÿ üF� ÿù G�ÿù ÿ� üÿúùþýúù ùýúü ù¹�ÿù û� � ýþúü ûÿ ��ÿ ûÿù üF� ÿùH ÿü ûÿ ùø ÿ ýû��ø�þü� �º :;Ù:<==<à >;¼ ä<: ½;¼à:<>¼àA¾

ÿ üF� ÿ ûÿ ��ý��øÿÿ øüþýú û��ø�øüþ�ÿ ÿùü þùù� ûÿ �ø ��ý��øÿÿ øüþýú �ý�þ��ÿ ÿú �ÿÿ��øxøúü � ��úþ©øüþýú�ø� �ø ��ùý ��üþýú ûÿ ýúü�øþúüÿù ù�� �ú ûýÿ øþúÿ �ø�üþ��þÿ� � �øúÿ ýþúù ýú � ÿ�ü ù �ø� �øúì þ� û� ýü� ��ýî��øÿÿ øüþýú �ý�þ��ÿ � ý�� ÿúùÿþ�úÿ� � �ø�ü ÿúüþí�ÿ �ø �ø�üþÿ ��ùý ��üþýú ûÿ ýúü�øþúüÿù � Cúÿ ÿ�üÿúùþýú ûÿ��ý��øÿÿ øüþýú �ø� ýúü�øþúüÿù ù�� �ÿù ûýÿ øþúÿù ©úþù ø �ü� ��ý� ýù�ÿ ûøúù ]P8 ^ � ÿüüÿ ÿ�üÿúùþýú ù �þúüí��ÿ ùý� ù�ý�ÿ ÿ ûÿ � þ��þýüìí��ÿ ÿú � � � ¤ ��ÿ � ÿ�ÿ ÿü ûÿ ýÿ� þúÿ� ûøúù �ú ùÿ�� ��ý��øÿÿ ÿ �ÿ ùüF �ÿ �ýúüþýúúÿ� ÿü �ÿ ùüF �ÿûÿ ��ý��øÿÿ øüþýú �ø� ýúü�øþúüÿù � Cúÿ � þ��þýüìí��ÿ ��� ù ��ÿúüÿ ÿü ��� ù �þìÿ æ û�ÿ � ¡øùø� Ü �þùùÿü·¸ ]B8 ^ æ�øþ�þüÿ ÿ ùüF �ÿ ûÿ ��ý��øÿÿ øüþýú �� Ͷ ÍÎ Ò Ñ × ¡ÛÛÒÖÕÐ ÛÐ×

�� �ÿùüÿ ú�øúÿ ýþúù ÿ�üøþúù ý��ù æ ú�ÿùùþüøúü �úÿ �ø�ü úýú ú�� �þ�ÿø��ÿ ûÿ ��ý��øÿÿ øüþýú ýÆ � � ù �þúüí��ÿÿ ø� � ¡ �ÿÿ þí�ÿÿ ÿúü ��øúû �ÿ üìíÿ ÿ û� ý��ù ÿùü �ú ø�ü�ÿ �ø�øûþ�ÿ ÿ ûÿ ��ý��øÿÿ øüþýú ÿü ûøúù ÿ øùø�üøúü �üþ�þùÿ� �ÿ �øú�ø�ÿ ø���ý��þ� � �ÿùü �ÿ øù ûÿ �ø ��ý��øÿÿ øüþýú �ý�þ��ÿ � �ÿù ÿ�� ��þÿúÿù û �þúü���øüþýúûÿ ��ý��øÿÿ øüþýú �ý�þ��ÿ ÿú `� � ú�ÿùùþüÿúü �úÿ �ÿ�ýúüÿ û� �øú�ø�ÿ � ¥øúù ÿ øù þ� ÿ� þùüÿ û �ø�ü�ÿùø�üÿ�úøüþ�ÿù ýÿÿ ÿ �ÿ �øú�ø�ÿ � ÿ���F ]B8 B^ �¥ÿ�� þíÿ ÿÿ ÿúü ù �þ� ÿùü ú�ÿùùøþ�ÿ æ ýÿÿ ÿ ûøúù �ú ý��ù ûÿ ÿ øü��þÿ� æ ûÿ ùÿ �ø���ý ìÿ� ûÿ ÿ øúþí�ÿ ©úÿ ûÿùÿ øì þúÿù ÿú �øùùøúü �ø� �ø ��ý��øÿÿ øüþýú øùùÿÿ��ÿ�� � O�ýþùþíÿ ÿÿ ÿúü ��øúû þ� ÿùü ý��þ�øüýþ�ÿ û �ø�ýþ� �úÿ�ÿùüþýú ���þùÿ û� üÿÿ� ù ýÿÿ ÿ ûøúù �ø �ø�üþÿ üÿÿ� ù ��ÿ��ÿ û� ýúü���ÿ ûÿ ��ýÿùù� ù Gø� ùÿúù þúû� ùü�þÿ�H ÿ �� þúÿ ý��ÿù� ýúû �øù � �ú �øú�ø�ÿ ýÆ �ø ���� ��øüþýú ûÿ ûýúú�ÿù GB H ÿùü ø�üýÿ øüþ��ÿ ÿü ýÆ ùýú û��ÿúìÿÿ ÿúüÿùü þÿ���� þùþ��ÿ � �ÿ �øþü ûÿ ÿ ø� ý�ÿ� �ø� �ÿ � þ�ÿ üÿÿ� ù û� B ÿùü ûþ¢ þ�ÿÿ ÿúü øÿ�üø��ÿ ûøúù ÿ øù �� �� )a � � 8 +/5 .30 9/7530 b 10-18 .1,30

¥øúù û �ø�ü�ÿù ûþùþ��þúÿù � �ÿúùÿþ�úÿÿ ÿúü ûÿ � �þú�ý�ÿ øüþ��ÿ ùÿ ��øüþ��ÿ �ø� �úÿ þúþüþøüþýú û ��ú �øú�ø�ÿûÿ ��ý��øÿÿ øüþýú ÿü ûÿù �øùÿù ûÿ � �ø��ý�þüìÿ þ��ÿ � �� ÿùü þúü��ÿùùøúü ûÿ ÿ ýúü�ÿ� �ÿù ø�� ý�üù ûÿ � � ûøúù­Þ ������R «����� «0��¿������ �R�������� �­ �0����� «�� «��� «���­¦{{{ «���U���U� «���� «0�������0���R�

Page 117: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

B�c [dZefopq � r qs wq f�sqvqs oÿù ûþùþ��þúÿù ÿú �ø�üþ��þÿ� �ø� ùýú ùFùüíÿ ÿ ûÿ üF� ÿù � çú ù �þúü��ÿùùÿ�ø üý�ü �ø�üþ��þí�ÿÿ ÿúü ø�� ùþÿúÿù æ��ý ìÿù ûÿ � �þú�ý�ÿ øüþ��ÿ æ ýÿÿ ÿ �ÿù ÿ øüì�ÿ øüþ��ÿù ÿü �ø �ìF ùþ��ÿ �E<àÚÞ=<à >ÜgA¾ �ÿ �øú�ø�ÿ �� ÿùü �ø�üþ��þí�ÿÿ ÿúü ø����þ� ûÿù ÿ øüì�ÿ øüþþÿúù � ý�� �ÿù �øþùýúù ù� þî�øúüÿù �ø úýüþýú ûÿ �ýúüþýú ÿùü � þÿú ýúú�ÿ æ �ø ÿ øúþ���øüþýú ûÿù �ýúüþýúù ýÿÿ ÿ �ø�ÿ�� ÿùü ø� ùùþ úøü��ÿ��ÿG�ø ýúùü��üþýú û �ÿúùÿÿ��ÿ ûÿ �ýúüþýúù �ø ûÿ ùýþ ÿú ÿ øüì�ÿ øüþ��ÿH æ �ø úýüþýú ûÿ ûýÿ øþúÿ ÿü ýûýÿ øþúÿûýúü �ÿ üF� ÿ ÿùü �úÿ ø���ý� þÿ øüþýú ÿùü �� ÿúý�ÿ þÿÿ �ûþøüÿ � ¤ú �øþü � �ø� ùü�øüþýú ûÿ �ýúüþýúù ÿü �ÿ�� ø���þîøüþýú ùýúü ûÿù ýúÿ�üù û�� � �üþ�þù�ù ÿú ÿ øüì�ÿ øüþ��ÿù � �ÿ ÿ øüì�ÿ øüþþÿú ù� �þø�þù� ÿú �ý�þ��ÿ ýÿ��ÿúû�øøþù�ÿ ÿúü �ÿ �øùùø�ÿ û� λ

îø�� � ø� �øú�ø�ÿ �� �� � � ÿ�ÿ ÿü �ø ýúùü��üþýú û �ø���þøüþýúù ÿ øüì�ÿ øüþ��ÿù æ ùýþü ÿú ø�� � ú�ÿ ��þ��ÿ æ ùýþü ÿú ø�� � ÿ�øü �çú ü�ý��ÿ�ø � ý�� ���� ³ �úÿ þÿ��øúüøüþýú ûÿù ��øúûù ÿúüþÿ�ù ÿü � ý�� ç� � ÿüþ�ÿ øÿ� �úÿ � þ��þýüìí��ÿû �ø�þüìÿ �üþ��ÿ ÿúüþí�ÿ ÿü ��ÿ��ÿ ÿú ���þùþýú ø�� þü�øþ�ÿ � ÿüüÿ ûÿ�úþí�ÿ � ÿ�ü þúü��ÿùùÿ� � �ÿúùÿþ�úøúü ûÿ ø�� �

�ý�ÿ ÿ� �� þ ÿùü ùÿ�ýú �ÿù øù þúü���� ÿú ÿ øüì�ÿ øüþ��ÿù ý� ÿú þú�ý�ÿ øüþ��ÿ � ¡ø� ÿ�ÿÿ��ÿ �ÿ ùF ùüíÿ ÿ ´ç·· �ý��úþü ûÿù � þ��þýüìí��ÿù ]Q8 ^ ÿú ç� � ÿüþ�ÿ øÿ� � ý�� �ÿ ø�� � �ý�ÿ ÿ� � ³� ù�� �� ÿ øþúüÿúøúü �ÿù �øú�ø�ÿùû �þÿ��øúüøüþýú ÿü ûÿ ��ý��øÿÿ øüþýú ûÿ üÿ�ù ùF ùüíÿ ÿù ù �ÿ� ÿü�øþü ���ü�ü ÿú � þù� ý� hh ýÿÿ ÿ �ÿ ùFùüíÿ ÿBÜ·´ºÚë¾ >ÜgA � �ÿúùÿþ�úÿÿ ÿúü û ��ú �øú�ø�ÿ ûÿ ��ý��øÿÿ üþýú ÿú ¡ìF ùþ��ÿ ýúÿ�úÿ � þÿú ùý��ÿúü �ÿ �øú�ø�ÿ´ý�ü�øú Gø� þ� ÿ� þùüÿ �úÿ �øùÿ þÿ� ý�üøúüÿ ûÿ � þ��þýüìí��ÿù ��þüÿù ÿú ÿ �øú�ø�ÿH ÿü � ¤ú ûÿìý�ù ûÿù ��ø�þü�ùû�� � û��þüÿù û� �øú�ø�ÿ �� Gù¹�ÿü� æ ÿ���ÿùùþ� þü� æ� � �H �ÿ üF�ø�ÿ ûÿ �� �üÿúû� ø�� �úþü�ù �ìFùþ��ÿù ]Ä^^ûÿ��øþü þúü��ÿùùÿ� �ÿ �ìF ùþþÿú ��ÿ �ÿù ýú�ÿ�ùþýúù ûÿ üF� ÿù þúü��ÿùùÿúü � ÿ� � �� ÿùü ÿ� ÿüþ�ÿÿ ÿúü � þÿú ø���ø��ÿû ��üþ�þùÿ� ûÿù �ýúüþýúù ÿ øúþ���øúü þúûþ���ÿÿÿ ÿúü ûÿù �ø�ÿ��ù û ��úþü�ù ûþ���ÿúüÿù ÿü ûýúü �ÿù ýú�ÿ�ùþýúùùýúü ø�üýÿ øüþ��ÿù æ ýÿÿ ÿ �ø� ÿ�ÿÿ��ÿ ø�� �ÿ� ù�� �ÿù ûÿ���ù ÿ�þ� ù ý� ´øì�ÿúìÿþü � ¥ �ø�ü�ÿù þúü���øüþýúùûÿ ùF ùüíÿ ÿù û ��úþü�ù ýúü �ü� ��ø�þù�ÿù � ý�� �üøúûø�û � � ]_ B^ ý� `�� ·µ ��gà:A¾ ß >¾½ >ä ?>¼A¾ �� ÿùü û�� � ûþ¢ þ�ÿ ûÿ �ÿÿúùÿ� � �ÿÿ��ýþ ûÿù �øú�ø�ÿù �ýúüþýúúÿ�ù ûøúù �ÿù ��ù� ù þúî�ý�ÿ øüþ��ÿù � �ÿù ÿ�ÿÿ��ÿù ûýúú�ù þîûÿùù� ù ùÿ øúüýúúÿúü � þÿú ùý��ÿúü � � ���ÿ ûÿ ´�øúÿ � �ø ü�ìÿ � ý�� �ÿùø�ü�ÿù ûþùþ��þúÿù ÿùü ÿúý�ÿ ��� ù ø�û�ÿ � çú � ÿ�ü ú�øúÿ ýþúù ��ý��ÿ� �ÿù ÿ�� ��þÿúÿù ÿ� ÿü��ÿù � � ��úùüþü�ü¡øùüÿ�� � ý�� �ÿù � þý �ý�þùüÿù ÿü � � ��úþ�ÿ�ùþü� ¡ø�þù Ä � ý�� �ÿù �þú�� þùüÿù �¡ÿúûøúü ��� ùþÿ��ù øúú�ÿù Gûÿ B__8 � B___H �ÿ ¿�ÿ�� þÿ û ��ú�ý�ÿ øüþ��ÿ �þÿúüþ©��ÿÀ ûÿ � ��úùüþü�ü ¡øùüÿ��ø ��ýûþ��� �úÿ �ý�ÿ øüþýú þú�ý�ÿ øüþ��ÿ·µ �øù�ÿ � ý�� �ø �ø�üþÿ ��ý��øÿÿ øüþýú ù�� �ÿ �øú�ø�ÿ �ìÿÿ ÿ � ý�� �ø��ùý ��üþýú ûÿ ��ý��íÿ ÿù � þý �ý�þ��ÿù � ÿüüÿ ÿ�� ��þÿúÿ ø û�� ý�ì� ù�� �ú ý���ø�ÿ û �þú þüþøüþýú ]Q B^ �

�ø �þú�� þùüþ��ÿ ø üý�� ý��ù �ü� ��ý ìÿ û� ø�� � ùFÿ� ý �þ��ÿ æ ��ýÿ ý��øúü ÿú ÿ�ø �ÿù �øú�ø�ÿù �ýúüþýúúÿ�ùÿü ý� � ÿüù � ý�� �ÿ ü�øþüÿÿ ÿúü ø�üýÿ øüþ��ÿ ûÿù �øú��ÿù � � �ÿúùÿþ�úÿÿ ÿúü û� ¥¤` ûÿ ¿� þú�� þùüþ��ÿ Oì�ý�þ��ÿ æ¥ÿù�þ�üþ�ÿ ÿü `�üýÿ øüþ��ÿÀ·º �ÿ ÿ ýúü�ÿ � �ÿù ��ý� ÿüù ùýúü � ��ø�þùÿ� ÿú ç� � ÿüþ�ÿ øÿ� ý� ³ø�ø � �ÿ \aaZp !\iÿú·» ]c~^ ûÿ �þú�� þùüþ��ÿ ýÿ��üøüþýúúÿ��ÿ û��ÿ�ý�� � �ø� B��ø�û ��ÿü ÿùü þÿ��øúü� ÿú ¿¡þû�þú � �Àæ úýFø�û �ç� � ÿüþ�ÿ øÿ� ûýúü �ø ùFúüø�ÿ ÿùü ��� þù�ÿ �� )( � � 3, j+56 971+, 8 356 9,3,73

� �ÿúùÿþ�úÿÿ ÿúü ÿú �ý�ÿ øüþýú � ÿ�ÿ øúÿúüÿ üý�ìÿ �ú ����þ � þÿú ûþ� ��ÿúü ûÿù �ü�ûþøúüù ù�� �ú üÿÿ� ù � þÿú��� ù ý��ü � � ÿ ����þ ÿùü �ÿùü�ÿþúü ÿü ÿ ýüþ�� �ø� �úÿ �üþ�þùøüþýú ��øüþ��ÿ û� �øú�ø�ÿ ûøúù �ú ��ü�� þÿÿ �ûþøü ��ø � ��þý ûÿ û �ÿúùÿþ�úÿÿ ÿúü û��øùùÿ �ø�ÿÿ ÿúü ûÿ�� ùÿÿ øþúÿù û �ýÆ �úÿ ÿ�üøþúÿ ûþ¢ ��ü� � � �ø� ùý�üþýú �ø� þûÿûÿ úý��ÿø�� ýúÿ�üù � ý� ù ø�ýúù ÿ ýúü� �úÿ ��ý� ýùþüþýú ûÿ ùüø�ÿ ûÿ ´ý�ÿ øüþýú ¡ÿ�ÿ øúÿúüÿ ÿú ç� � ÿüþ�ÿ

­­{{{ ��� � «R��Ï «0��0��­¯0S��� «R��Ï «0����0�k�0�{����l� ������ «U�� R­¼{{{ «�� «�� � «0��¿�R�� �U���­¾{{{ «������� «0�����U���U���� ���������T��� ��������m «U�� R­Ã��R��� «R��S� ��� «�� ����� «0���� ���S� �� ������� �R� «U�� R­Î��� �RR�� «����� «0��¿U����öþn������ «U�� R

Page 118: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

� r� r v z q o zqw of [q B�_øÿ� � � ��úþ�ÿ�ùþü� ¡ø�þù ^·Õ � ��� ÿù ûÿ�úþí�ÿù øúú�ÿù úý� ù ø�ýúù ÿ�ÿü�� ùþ� ùüø�ÿù û ��úÿ ùÿÿ øþúÿ � ý�� �ÿùþú��úþÿ��ù û� ¤` ÿü ûÿ ´O�Â¥ � ý�� ûÿù ����þù û �þú��úþÿ��ù ÿü ûÿ ìÿ�ìÿ��ù ûÿ ÿù ýÿ�ø�úþÿù �

� )� � � 37 .30 op*�Cúÿ �ø�üþÿ ûÿ � �ÿúùÿþ�úÿÿ ÿúü ûÿ �ø ��ý��øÿÿ øüþýú ùÿ �øùùÿ � ý�� � ��ü�ûþøúü �øÿ � �ø ÿ øì þúÿ ùýþü û��øúü�ÿù ¿O�ø�ø�� ù�� �øì þúÿÀ ùýþü �ø� �ÿù ûÿ�ýþ�ù � �ÿúû�ÿ � çú � ÿ�ü ��ý �ýú�ÿ� ÿüüÿ �ÿ�øüþýú ��ýüþûþÿúúÿ �ø� ûÿùûÿ�ýþ�ù ý� ûÿù ���ÿ��ÿù ÿú üÿÿ� ù �þÿ þü� ù�� ÿ øì þúÿ � çú û��þü �úÿ ÿ�� ��þÿúÿ ûÿ úýüøüþýú ø�üýÿ øüþ��ÿ ûÿÿ øùùÿ �üþ�þù�ÿ � ý�� �ø �þÿúÿ û �þú�ý�ÿ øüþ��ÿ ûÿ ¡ø�þù ^ � �ø ��ý��øÿÿ øüþýú ÿùü �úÿ ûÿù ûþùþ��þúÿù �� þ ùÿ ��²üÿ� þÿú � � �ø�üýî�ý�ÿ øüþýú ûøúù �ø ÿ ÿù��ÿ ýÆ �ú ÿ�üøþú úýÿ��ÿ û �ÿ�ÿ�þÿù � ÿ��ÿúü ²ü�ÿ üÿùü�ù þÿÿ �ûþøüÿÿ ÿúü

ù�� ÿ øì þúÿù � Cúÿ ùÿüþýú û� ûÿ�� � �` � æ ø�� ÿ��ÿ �¡`¥ � ý�� �ÿ ùÿÿ þî���ùÿúüþÿ� æ ø �üþ�þù� �ú �û��ýÿ û �ø�üýî�ý�ÿ øüþýú � ý�� �ìÿÿ ÿ � ý� ù �ÿ ���ùÿúüýúù ÿü ûþù�üýúù ûÿ �ø � ýùùþ� þ�þü� û ��üþ�þùÿ� `� � ûøúù ÿ øû�ÿ �

Þä:AgqA¾ ¾g: =<½Ú >¼A¾ ½;::>ÙÞA¾ <gà;=<à >ÜgA=A¼à � �þúü��²ü ø�ý�ù ÿùü ûÿ üÿùüÿ� ûøúù ûÿù ýúûþüþýúù¿��ÿ��ÿùÀ ýÿÿ ÿúü � ��ü�ûþøúü ø� ý�ûÿ ÿü þÿ��øúüÿ �ú ��ý��íÿ ÿ � ì�þùüþøú ��ÿþúúÿ ý��øúþùÿ ûÿ�� þù ÿ øþúüÿúøúüü�ýþù øúù ûÿ üÿ��ÿù ���ÿ��ÿù ÿú �þÿúÿ û �þú�ý�ÿ øüþ��ÿ � ç�ü�ÿ ûÿù ��ý��íÿ ÿù ûÿ �ý�þùüþ��ÿ þúì��ÿúüù ø� ��øúûúýÿ��ÿ û ��ü�ûþøúüù Gÿú� þ�ýú 8�� ÿú �þÿúÿH ÿ �� þ ú�ÿùùþüÿ ûÿ ü�ý��ÿ� ù�¢ ùøÿ ÿúü û �ý�ûþúøüÿ��ù ûþù� ýúþ��ÿùÿü ý��ÿüÿÿ ÿúü ýú©����ù æ �ø ��øúûÿ ûþ¢ ��ü� ÿùü �ø úýüøüþýú ø�üýÿ øüþ��ÿ ]BQ8 ^ ûÿ ÿù ���ÿ��ÿù � ¡ý�� ÿ�ø�ú ÿúùÿÿ��ÿ û �ý�üþ�ù æ ø�� ÿ�� ´�Ëþü´Ö æ ÿùü ��ý� ýù� � ý�� üÿùüÿ� �ÿù ���ÿ��ÿù ÿü øúúýüÿ� �ÿù ý��ÿüþýúù � `�ýúÿ�üÿ�� ûÿù ���ÿ��ÿù ûÿ ýúùü�� þ�ÿ �ÿù � ÿ�� ûÿ üÿùüù � ý�� � �þúùüø��øüþýú û� �ø�íÿ ÿ ÿü �ÿù þúûþøüþýúù ù�� �øý� þÿ ��ÿü�ýúþ��ÿ ûÿ � ��ü�ûþøúü � �� ÿùü � úýüÿ� ��ÿ �ÿù �ü�ûþøúüù øÿ�üÿúü � þÿú ÿüüÿ úýüøüþýú ¿ø�üýÿ øüþ��ÿÀûøúù �ø ÿ ÿù��ÿ ýÆ �ÿ�� ý� þÿ ÿùü � þÿú øúúýü�ÿ æ ! áâá �� �þ�ù ýÿ��ÿúúÿúü ��ÿ�ù üÿùüù ýúü �ü� ÿ� ÿü��ù ÿü ýÿÿ ÿúü�ÿ��ù ��ý��øÿÿ ÿù ýúü ��ø�þ �ÿ ýúü���ÿ ý��ÿù� ýúû � ý�� ìø��ÿ ùÿÿ ÿùü�ÿ � ��øü�ÿ ���ÿ��ÿù G�ú � ÿ� ÿ ýþúù ûÿ ÿúü �ü�ûþøúüù �ø����ÿ��ÿH � ¡ý�� ù �ÿúü�ø�úÿ� �ÿù �ü�ûþøúüù � ÿ��ÿúü �ÿ� ý�ÿ� ø�ÿ �ÿù ÿ�øÿ ÿúù �øùù�ù´ ¶ �ÿù ���ÿ��ÿù �øþùùÿúü �þ��ÿ �ÿ ìýþ� û� �øú�ø�ÿ û �þÿ��øúüøüþýú � ¤úü�ÿ �ÿù ���ÿ��ÿù û� ��ÿÿ þÿ� ùÿÿ ÿùü�ÿÿü ÿ��ÿ û� ùÿýúû æ ýú ù �ø� ÿ�xýþü ûÿ � �øþùøúÿ ��øúûþùùøúüÿ ûÿù �ü�ûþøúüù ÿú ��ý��øÿÿ øüþýú ûøúù �ÿù ìýþ���� ù �ø�þ�ù û� ý� ûÿù �øú�ø�ÿù � ý�� �ÿ��ù ùý ��üþýúù � `�� ø �ü� �øþ��ÿÿ ÿúü ìýþùþ �ø� �ÿù �ü�ûþøúüù ûøúù �øÿ ÿù��ÿ ýÆ þ�ù �üþ�þùÿúü �����ÿÿÿ ÿúü �ÿ ý� �ÿù ûÿ�úþÿ�ù �øú�ø�ÿù �� ù ÿú ý��ù � �øúÿ ýþúù ç� � ÿüþ�ÿ øÿ� ÿùü�ú øúûþûøü þúü��ÿùùøúü � ý�� �ÿù ���ÿ��ÿù � û���ÿ �þÿ þü�ÿ �ø� �ÿù �øþ�þü�ù �� �ý� �ÿ �ÿ \a� Zâ"âZ � ý�� �ú �øú�ø�ÿùüøüþ��ÿÿ ÿúü üF� � �<gà;I»;:=<à >;¼ �ÿ �û��ýÿ û� ý��ù ¿¡ �ý��øÿÿ øüþýú ����ùþ�ÿÀ ù �øû�ÿùùÿ ø�� �ü�ûþøúüù ù� þ�øúü �ø ùÿîüþýú ûÿ ¥ÿ�� � �` � ûÿ ¡ø�þù ^ ùÿÿ þî���ùÿúüþÿ��ÿ ]QÄ ^ � ÿù �ü�ûþøúüù úÿ ù� þ�ÿúü �øù ûÿ ý��ù ÿ ø�þùü�ø� æ þ�ù ýúü�ø� ýúü�ÿ ûÿù �ÿúûÿÃî�ý� ù ìÿ�ûýÿ øûøþ�ÿù ÿú ûÿÿ þî��ý�� ÿù ø�ÿ �ÿ��ù ÿúùÿþ�úøúüù � ÿ �û��ýÿ �ÿÿ��øÿ� �ÿúùÿþ�úÿÿ ÿúü ÿ ø�þùü�ø� ��ýûþ��� ìø� þü�ÿ��ÿÿ ÿúü ûøúù ûÿù øÿ�ì þüì�øü�ÿù øùùÿà ìø���ù Gÿú� þ�ýú ûÿ�� ÿúüùþúù�þüù �ø� ùÿüþýú H ÿü ÿú �ø�üþÿ �ÿù ü�ø�ø�� ûþ�þ��ù ÿü ��øüþ��ÿù � �� þüÿ � �ø �ÿü��ÿ û ��ú ìø� þü�ÿ û� ý��ùû� �û��ýÿ æ � ��ü�ûþøúü � ÿ�ü ù �ÿ�ÿ�ÿ� ÿü ù �ø�üýî��ø��ÿ� �ø� �ú ÿúùÿÿ��ÿ ûÿ hf!uu ý��ÿù� ýúûøúü ø�� ýúÿ�üùû� ìø� þü�ÿ � ÿù ��ÿùüþýúù ûÿ ��ý��øÿÿ øüþýú ���ùÿúü�ÿù ûøúù �ú úø� þ�øüÿ�� �ÿ� ú�ÿùùþüÿúü ��ÿ � ��ü�ûþøúü��ý��øÿÿ ÿ � ¡ý�� ÿ�ø �ÿù �� þÃà ùýúü �ÿ�þ�ù � � �ÿú� þ�ýúúÿÿ ÿúü ¥ ��ìÿÿ ÿ �� þ ��ø��ÿ � �ø �ý ��ÿ ùÿù ��� ýúùÿù ��ÿù ùý ��üþýúù ùýúü ���þ©�ÿù ù�� ûÿù � ÿ�� ûÿ üÿùüù ýúùü�� þüù �ø� �ÿù ÿúùÿþ�úøúüù � �ÿù ÿ��ÿ��ù ùýúü �ÿ� ý�ü�ÿù� þù�ÿ��ÿÿ ÿúü � � ��ü�ûþøúü � ý��øúü ø�ý�ù ý��þ�ÿ� ùø ùý ��üþýú ÿ��ýú�ÿ ��ÿ �øú�ø�ÿ ûÿ ÿü ÿúùÿþ�úÿÿ ÿúü ÿùü �ìÿÿ ÿ ÿ øþù æ ùþ � �ýú ùøþü ýÿÿ�úþ��ÿ� ø�ÿ �ÿ \a� Zâ"âZ ç� � ÿüþ�ÿøÿ� ýÿÿ ÿ ���ùÿúü� ø� ìø� þü�ÿ P ÿ ûÿ�úþÿ� � ý���øþü �øþ�ÿ ý¢ ÿ ûÿ �øú�ø�ÿ ù��� ý�ü � ý�� �ú üÿ� ý��ù �

­Ý{{{��� «����Ï «�� ����� «0��0������R�S�� «U��¯Þr ïî ô ð�í ëò ¨ðñîís ëò t ïñìë uò� ò�îíïòë Í {{{ ��� � «R��Ï «0��¿Y��������À��S��� ��¯ �§ññìëò� ¨tu Í �{{{ «��0��Ï «�� ����� «0��R���� �������R����0��

Page 119: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

BB� [dZefvpq � r qs wq f�sqvqs v� )w *+,-./01+, 2 37 .30 +:x 370 y

�ÿ ý ��ý��ÿ ùþÿúüþ©��ÿ ÿú � �ìýúúÿ�� ûÿ ³ÿøúî´�øúxýþù ¡ÿ��ýü ]Q�^ ù�� �ÿ üìíÿ ÿ ¿Q� øúù ø��íù ýÆ ÿú ùýúü�ÿù ý� � ÿüùÀ ù �ÿùü ýú�� �ø� �úÿ üø��ÿ �ýúûÿ ýÿÿ ÿúüøúü �ø ��ÿúüÿ ûþù� ùùþýú ÿúü�ÿ  þìø�û Bø��þÿ� ]^8 ^ ÿüB�F �üÿÿ�ÿ ]B8~ ^ ù�� ¿�ÿù ý� � ÿüù ýúüîþ�ù �ìý�� �À� ì�þùüþøú ��ÿþúúÿ ýú��øþü ùýú üÿ�üÿ þúü�ýû�üþ� øþúùþ ¿ zfâ Zâ `acbâ n�cn�câ â�"�`! â�\ �a\câ f�!"âc bâ Zâ\\c{ â \ ba�X f� � cag c| � f! hf â � Zf � âf"â�\ � cag c�YY âc â\ �!� ! Xa�\c!nf âc } â�c!X`!c �a\câ f�!"âc Y ~Y â ! Zâfc XfZ\fcâ � mâ \ � � } Z�` �f\âfc bf c�� � âY â�\ hfâ �af � !�XfZhf { �â��[qc���a! i âcca\á _af\ XaYY â !Z â \ � c{e {c�nZâ hfâ\af �X` â�\ an\â�!c f� â c�X!� â X�cc{â v�"âX f� â X�ZXfZâ\\âw � Zf\�\ hf â bâ Z�! âc f� â âfZâ �a!g� {â �"a!c Z� X�ZXfZâc v�"âX f� Xc�da� â\ bf ��� !âcw j !Z â \ � Zf �\! e �! �� \ bâ Z�! âc mâY�af !{câc�a b! � f\â â\ bâ �af \afc� âc "âc Zâ bâf� � canZ|Y â Y �o âfc bâ Z mâ� â!g� âY â�\ f!"�� \ �� �aYY â�\ â� â!g� âc Z mano â\ ø� þú þüþý �f� Y � â �� �aYY â�\ â� â!g� âc Z m�!�e acY �\!hf â� �f� e f\fc â�� âc\ �F \ �!� ! Zâ `acbâ �afcca�\[âZ Zâ e a�bâc f� â �af"âZ Zâ X!"!Z! �\!a� á À

ýü�ÿ ��� ýúùÿ ÿùü �� �þ� ú �ÿ� þùüÿ �øù Gÿúý�ÿH �ú �øú�ø�ÿ � ý� � ÿüù � �ûø�ý�þ��ÿ æ ÿü ûýú � �ÿúùÿþ�úÿÿ ÿúü ûÿ� �ý� � ÿü ø�� ÿ øùùÿù ÿùü ûþ¢ þ�ÿ ùþ � �ýú ìÿ�ìÿ � �üþ�þùÿ� �ÿù �øú�ø�ÿù ý� � ÿüù � ù�íù ýÿÿ ÿ ³ø�ø æ � ý�¹Ü � ¤O � ÿù ûÿ�úþÿ�ù ùýúü ùý��ÿúü ýúùþû���ù ýÿÿ ÿ ûÿù �øú�ø�ÿù `O´ ´¸ üøúü � ý�� �ø ÿ ýû��þùøüþýú ûÿ ùFùîüíÿ ÿ û �þú�ý�ÿ øüþýúù æ ��ÿ � ý�� �ø ûÿù�þ�üþýú û �þúüÿ��øÿù �üþ�þùøüÿ��ù ÿü ÿ ²ÿ ÿ � ���þü��ÿ û �ø��ý�þüìÿ ÿ � �� úý� ùùÿÿ��ÿ �� �þ� ÿùü ��� ù �øþ�ÿ û �ø� ý�ûÿ� � �ý� � ÿü ÿú øFøúü øùùþÿ þ�� ÿ �� �ÿùü �ú ø�� � � � �ý� � ÿü �üøúü ø�ý�ù �üþ�þù�� ý�� �ø ÿ ýû��þùøüþýú � �þ � �ýú �ø��ÿ ûÿ ø�� � æ �ÿ ÿ ýûí�ÿ �ýúüþýúúÿ� ÿùü ø���ý��þ� � �þ � �ýú � ý� ùùÿ ÿ �øþùýúîúÿÿ ÿúü æ � �ÿúùÿþ�úÿÿ ÿúü ûÿ � �ý� � ÿü �øùùÿ �ø� �ø ��ý��øÿÿ øüþýú �ýúüþýúúÿ��ÿ G�� �ÿ��ÿ ùýþü üF� �ÿ ùüøüþ��ÿÿ ÿúüý� ûFúøÿ þ��ÿÿ ÿúüH �Cúÿ �ýþù ÿù úýüþýúù ûÿ ø�� � ÿü ûÿ ýÿ� ýùþüþýú ûÿ ø�� �ù � þÿú øùùþÿ þ��ÿù þ� ûÿ� þÿúü � ýùùþ��ÿ ûÿýÿ��ÿúû�ÿ �ÿ ÿ �øúþùÿ ÿ ûÿ �þøþùýú üø�ûþ�ÿ ÿü � �þúü��²ü ûÿ �ø ù� �þø�þùøüþýú �ø� ì��þüø�ÿ � �þ � �ýú ìÿ�ìÿ �ùø�üÿ� ÿüüÿ �üø� ÿ æ þ� ÿùü ��øùþÿ ÿúü ý��þ�øüýþ�ÿ ûÿ ÿ øù��ÿ� �ÿù ù� �þ©þü�ù ûÿù ý� � ÿüù æ ÿ �� �ÿùü �ú � ýþúüû �ÿúü��ÿ û ��ú ��ý��øÿÿ ÿ´· æ ÿ �� �ÿùü �úÿ þúùüøúÿ û ��úÿ �øùùÿ �ý ø�ÿ � ý�� û�©úþ� �ú �ý�üÿ�� ù�� �úýÿ� ýùøúü ��ø�ì þ��ÿ æ ÿü � çú �ÿüýÿ� ÿ ø�ý�ù ûøúù �ÿù ¿ü��ù ÿü øùü�ÿùÀ ûÿ �ø ��ý��øÿÿ øüþýú ìÿ�ù � �ø��ÿùùÿ þú�ý�ÿ øüþ��ÿ æ ÿ �� þ ø � ÿ� ûÿ ùÿúù � ý�� �ú ÿúùÿþ�úÿÿ ÿúü ûÿ �øùÿ ûÿ �ø ��ý��øÿÿ øüþýú �

¡ý�� �ÿ ù� �þø�þùüÿ �ø ��� ýúùÿ ÿùü ��� ù �øþ�ÿ þ� ûýþü ýúúø�ü�ÿ �ÿù ûþ���ÿúüù �ø�øûþ�ÿ ÿù ûÿ ��ý��øÿÿ øüþýúù���ÿúüþÿ��ÿ Gþÿ� ��øüþ� æ �ýúüþýúúÿ� æ ý� � ÿüùH ÿü �ÿ��ù ùF ùüíÿ ÿù ûÿ üF�ø�ÿ GûFúøÿ þ��ÿ ý� ùüøüþ��ÿH � � �ý�û�ÿþÿ� ý�üÿ � ÿ� û� ÿ ýÿ ÿúü ��ÿ ÿù ûþ� ��ÿúüù ÿ ýûí�ÿù ùýúü �� ù ÿü ýÿ�ø��ù �

¯¦� �ð�î tìïíò �¯­ �ò îíðô êéëá$íò � �2� ôð�í ��� R�� ������ 2��� � ��� èò �ì#ì �

Page 120: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

G H IJ KLMN �

� T� � RT� Q � ��� � �T��W T� Q R

�ÿù �øú�ø�ÿù �ýúüþýúúÿ�ù ùýúü ��þúþ�ø�ÿÿ ÿúü þùù� ù û� ÿ ýúûÿ øøû�ÿ þ��ÿ øþúùþ ��ÿ �ø ÿ ø� ÿ��ÿ �ø�üþÿ ûÿ�ÿ�� ýÿÿ�úø�ü� ûÿ ��ý��øÿÿ ÿ��ù � ��ù ù� þ�ÿúü �ÿ ÿ ýûí�ÿ ¿ý� ÿú ùý��ÿÀ �� þ �ø�ý�þùÿ �ø ûþ�� ùþýú û �ø���þøüþýúù�ø� � ��ìøú�ÿ ûÿù ùý��ÿù � �ÿýÿ� þ�ÿ� � � �þúü��²ü ÿùü ûÿ � ý��ýþ� ýúúø�ü�ÿ ÿ �� þ �ø ÿ�ÿüþ�ÿÿ ÿúü ²ü�ÿ ÿ���ü�ù�� ùø ÿ øì þúÿ � ¤ú ÿ�ø �ÿùü �ú �ø�ÿ ûÿ ù¹�ÿü� � �øúÿ ýþúù �ÿù ûþ� ��ÿúüÿù û�� ÿúûøúÿù û ��úÿ ø���þøüþýúø�ÿ ÿ�üøþúÿù � þ��þýüìí��ÿù ú�ÿùùþüÿúü � þÿú ùý��ÿúü ûÿ ûÿ�ýþ� ø� ùùþ �ÿù G�ÿHýÿ� þ�ÿ� � Cúÿ þúùüø��øüþýú ûÿ� þÿúü�ø� þûÿÿ ÿúü �ú ���þüø��ÿ � ÿ� ûÿ � þùüÿ � ÿ ÿ ýûí�ÿ ù �øû�ÿùùÿ ø� ��ý��øÿÿ ÿ�� ý� û� ÿ ýþúù � �ú �üþ�þùøüÿ��ÿ øúþøúü ø�ÿ ûÿ�ü��þü� �ÿù " £�#�AÊ# ÿü ø�ü�ÿù @É��A�§\# � �� úÿ � ÿ�ü �øù ²ü�ÿ �üÿúû� � � ��üþ�þùøüÿ�� ú�ý�ìFüÿ �¡ý�� ÿ�ø æ F ýÿ��þù � ý�� �ÿù ùFùüíÿ ÿù ¿ý� ÿú ùý��ÿÀ ýÿÿ ÿ � þú�� ý� Ü�¥ æ þ� ÿ� þùüÿ ûÿù ùF ùüíÿ ÿù ûÿ�ø��ÿüø�ÿù � ÿ�ÿ ÿüüøúü ûÿ ûþùü�þ��ÿ� ûÿù ÿ���üø��ÿù ÿü û �þúûþ��ÿ� �ÿù û�� ÿúûøúÿù � ý�� �ÿù � þ��þýüìí��ÿù ��ÿù ��þúþ�ø�� ùýúü \å" � ý�� Âÿû� øü��øúû�øËÿ G� þú�� H æ å£@�£�# � ý�� ¥ÿ� þøú G� þú�� H ÿü åÉ\ã � ý��´�ÿÿîÜ�¥ GÜ�¥ H � ýÿÿ ÿ ÿù ùF ùüíÿ ÿù ùýúü � ý�ü�ù ù�� ��� ùþÿ��ù ø�ì þüÿü��ÿù ÿ øì þúÿ æ �ø ûþ�� ùþýú û ��úÿø���þøüþýú ú�ÿùùþüÿ ø�üøúü ûÿ �ø��ÿüø�ÿù ��ÿ ûÿ ý���ÿù GùF ùüíÿ ÿ æ��ý ÿùùÿ��H � �ÿ ùF ùüíÿ ÿ ÿ�ü�üÿ� �� þüý��úøþü ù�� ûþ� ��ÿúüù ��ýÿùùÿ��ù G�ýüý�ý �ø ^c�8� æ �úüÿ� æ �¡ î¡` ÿü ��ø�H ø�øþü � ùýú �� ý��ÿ þúü�ýû� þü �øúýüþýú ûÿ ¿��ýùÀ � þúøþ�ÿù Ge �\ n!��c!â H ��ÿ � �ýú � ý��øþü ��ýû� þ�ÿ � �ø�üþ� û ��úÿ ùÿ��ÿ ��øüÿî�ý�ÿ ÿ � ` ùùý þ�ù� �ú ùFùüíÿ ÿ ûÿ �ø��ÿüø�ÿù þ�ù � ý��øþÿúü ø�ý�ù ²ü�ÿ ûþùü�þ���ù � ý�� �ÿù ûþ���ÿúüù ��ýÿùùÿ��ù ÿú ø�üý�þùøúü� �þúùüø��øüÿ�� � úÿ ýúùÿ��ÿ� ��ÿ �ÿ � þúøþ�ÿ �üþ�ÿ ¶ � ý�� ùýú ý�ûþúøüÿ�� �

ýÿÿ ÿ �ø ����ø�ü ûÿù ø���þøüþýúù �üþ�þùÿ �úÿ þúüÿ��øÿ ��ø�ì þ��ÿ � ý�� þúüÿ�ø�þ� ø�ÿ � ��üþ�þùøüÿ�� G�c�� `!X� âc D�\âce �Xâ ý� ��DH �ÿ ùFùüíÿ ÿ ûÿ �ÿùüþýú ûÿ �ÿú²ü�ÿ ø �� þ ø� ùùþ ùýú þÿ� ý�üøúÿ � çú ü�ý��ÿ ��þúþ�ø�ÿîÿ ÿúü �ÿù ü�ýþù ùFùüíÿ ÿù ù� þ�øúüù � î� þúûý� øùùý þ� � Cúþ� æ � þúûý� ù ÿü ùÿù û��þ��ù ÿü ø�� ýúîý ýø � ý���øç�� � �� ÿùü � úýüÿ� ��ÿ �ø �ø�üþÿ þúüÿ�øüþýú û ��úÿ ø���þøüþýú ø�ÿ � ��üþ�þùøüÿ�� ��ÿúû �úÿ �ø�ü ûÿ ��� ùÿú ��� ù þÿ� ý�üøúüÿ ûøúù �ø ��ø�þùøüþýú û ��ú ��ý��øÿÿ ÿ � �ÿ ýúÿ�üÿ�� û �ø���þøüþýúù ø ø�ý�ù �ÿ ìýþ� ÿúü�ÿ�üþ�þùÿ� �úÿ � þ��þýüìí��ÿ ��ø�ì þ��ÿ � ý�ü�ÿ ù�� ÿù ü�ýþù ùF ùüíÿ ÿù ý� � þÿú û �ÿú ìýþùþ� �úÿ ÿú ��ý©üøúü ø�ý�ùûÿ ùÿù ù� �þ©�ù � çú � ÿ�ü þüÿ� � �ÿ�ÿÿ��ÿ û� �øú�ø�ÿ ³ø�ø �� þ ø�ÿ ùÿù � þ��þýüìí��ÿù `�O ]B^ B^ ÿü �� þú� ]B�P ^ø��þ�ÿ � ù �ÿ���üÿ� ù�� ÿù ü�ýþù ùF ùüíÿ ÿù ûÿ �ÿùüþýú ûÿ �ÿú²ü�ÿù ø� ��þ� ��ÿ���ÿ�ýþù û ��úÿ � ÿ�üÿ û �ÿ¢ øþü� �¤�þ� ùÿ ø û��ÿ�ý�� � ùø ��ý��ÿ � þ��þýüìí��ÿ ��ø�ì þ��ÿ ³ø�ø æ ø�� ÿ��ÿ ��O ¸ æ � ý�� øÿ ��þý�ÿ� � �ÿ¢ øþü� �� þüüÿ� � ÿ�û�ÿ ÿú ù¹�ÿü� û �ÿ���üþýú �

¥ �ø�ü�ÿù � ýþúüù ùýúü �üþ�ÿù � ý�� �úÿ ÿ ÿþ��ÿ��ÿ ûþ�� ùþýú � ý�� �ÿ ��øúû ����þ ýÿÿ ÿ �ø �øþ�þü� û �þúùüø��øüþýúÿü ûÿ ÿ þùÿ � � ý�� æ ÿü �ø ���þýúø�þùøüþýú ûÿù ø���þøüþýúù � ý� ù ���ùÿúüýúù ø�ý�ù úýù ü�ø�ø�� �� þ û�ý��ÿúü ûÿù ìø� þü�ÿù ����ûÿúüù � çú ù �þúü��ÿùùÿ üý�ü û �ø� ý�û ø��þúüÿ��øÿù ��ø�ì þ��ÿù � ý�üø��ÿù � ý�� ç� � ÿüþ�ÿ øÿ� æ üý�ü �ø�üþ��þí�ÿÿ ÿúü �ø � þ��þýüìí��ÿ �\£å] A@? � çúþ��� ùü�ÿ ÿ ��ý� ýù �ø� �ú � ý�üø�ÿ �ø�üþÿ� ûÿ ÿ��ÿîþ �üþ�þùøúü ³ø�ø � ü�ø�ÿ�ù � ��£@£\� � �ÿùü ø� ùùþ � �ý øùþýúûÿ ûþù�üÿ� û� ÿ ýûí�ÿ ûÿ ��ý��øÿÿ øüþýú �ýúüþýúúÿ��ÿ � ý�� �ø ýúùü��üþýú û �þúüÿ��øÿù ��ø�ì þ��ÿù ��òñ �îïëï�ìñî ë °�îïëïîìïíò R��� �� ï ô ðíîò $ ïòñ �ðñ ñð� �¦��� «��R�� �� «��S������R��� ����R��k¡� �¢���S� � £�k¡� �¢���S� � £ «U�� R

BBB

Page 121: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

BBQ [dZefv¤¥ ¦§ ¨f©© �ªf«¬ ¨ �Zee­f[Zvf«¬ªCú ø�ü�ÿ �ÿüÿ�� ûÿ ûþ®� ùþýú ùþÿ��þ©� �øùùÿ �ø� � �ÿ���üþýú û �ø���þøüþýúù ��ø�ì þ��ÿù � � �þúü��þÿ�� û ��úúø� þ�øüÿ�� �ÿ� � ¤ú �üþ�þùøúü �ÿ \a� Zâ"âZ ÿÿ�ø���� û �ç� ¯ ÿüþ�ÿ øÿ� ýú û��þü �ÿ ÿ �øúþùÿ ÿ ûÿ ýÿÿ�úþøüþýúÿúü�ÿ ��� Zâ\ ÿü úø� þ�øüÿ��ù � ÿù ûÿ�� ��ÿÿ þí�ÿù ùÿüþýúù ìÿ�ìÿúü �ø � ý�üø� þ�þü� ûÿù ø���þøüþýúù � ý���ÿù �üþ�þùÿ� ù�� �ÿù ûþ®��ÿúüÿù ��øüÿùî°ý�ÿ ÿù ùFùüíÿ ÿ�þúüÿ�°øÿ � �ø ü�ýþùþíÿ ÿ ùÿüþýú ÿ ýúü�ÿ �ø ýúùü��üþýúû �ø���þøüþýúù ç� ¯ ÿüþ�ÿ øÿ� ù� �þ©��ÿù � ý�� ± øç�� ÿü � ý�� � ¤O � çú ýú��ü ù�� úýù ý�þÿúüøüþýúù°�ü��ÿù � ý�� �úÿ ÿ ÿþ��ÿ��ÿ ûþ®� ùþýú û �ø���þøüþýúù �

w )� p,735j9-3 �598² 1³/3 8 +579: .3�ø úýüþýú û �þúüÿ�°øÿ ´�ø�ì þ��ÿ � ý�üø��ÿ úÿ ûøüÿ �øù û �ø�¯ý��û �ì� þ µ �ú ÿ�ÿÿ��ÿ ù�� �ÿ��ÿ� �ÿ� ýùøþü `±�¹ Q �^î B ÿùü �ÿ ¿� þüÿ ø� � þ�ü�ÿ�À ûÿ �ÿ¶� þù� � ç� ¯ ÿüþ�ÿ øÿ� ÿü ùýú øú²ü�ÿ øÿ�î� þ´ìü ��ý� ýùÿúü �úÿ � þ��þýîüìí��ÿ ùþÿ��ÿ æ ø�� ÿ��ÿ �\·å] A@? æ �� þ ý® �ÿ �úÿ °ÿú²ü�ÿ ´�ø�ì þ��ÿ � ý�� � �ø¸ ìø´ÿ ûÿ üÿ� üÿù ÿü �ÿ ûÿùùþú øþúùþ�� ��úÿ ´ÿùüþýú ûÿù ���úÿÿ ÿúüù � Cúÿ ø�ü�ÿ � þ��þýüìí��ÿ ��� ù ��ÿúüÿ @·" ¹ã� æ þú�� ùÿ ûÿ�� þù � ÿ� ûøúù �ø ûþùîü�þ��üþýú æ ûýúúÿ ûÿù � ýùùþ� þ�þü�ù � ý�� ýúùü�� þ�ÿ �úÿ þúüÿ�øüþýú ��� ù �þìÿ � �øùÿ ûÿ k!bg â\ º � » ��ÿ �ÿ� ý¼ÿ ¼���ÿ \aaZp !\ ½� ¾�¿ÀÁ ÁÀ ÁÂÁÃÄÅÿ ÅÀÂ Æ ÇÈÉ � î� ÁÀ¾Ç� Å ÄÁ� ÃÈ ÄÃÀ´Ã´Å ¾Å ÊÇÿÿ ÃÀ¾Å ½ @¹ � ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä ÆÉÅÀ¾ÃÄÇɼ Äà ÆÄÃÊÅ ¾È ÄÃÀ´Ã´Å ¾Å ÊÇÿÿ ÃÀ¾Å Î �ż ÊÇÿÿ ÃÀ¾Å¼ ´ÉÃÆì Á�Èż ¾ �ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä ÊÇÉÉÅ¼Æ ÇÀ¾ÅÀ ÃÈÏÃÆÆ Åļ ¾Å¼ ÊÇÿÿ ÃÀ¾Å¼ ¾Å ½Ð Î ÑÄ À �F à Æü ¾ �ÁÀÂ�´ÉÃÂÁÇÀ � Äà ÿ ÃÀÁíÉÅ ¾Å ÒFÂìÇÀ Å ¼ÇÀ ÈÂÁÄÁ¼ÃÂÁÇÀ À�Êż¼ÁžŠÊÇÀÀÃÓÂÉÅ Äà ¾Ç ÊÈÿ ÅÀÂÃÂÁÇÀ ¾Å ½Ð Î ½Ð ż ÃÊÂÈÅÄÄÅÿ ÅÀÂ Æ ÇÉÂ� ¼ÈÉ � ÁÀ¾Ç� ¼ Å ÅÀ ÊÇÈɼ ¾Å Æ ÇÉÂÃ´Å Æ ÇÈɱ ÃÊçÔ� Î ÑÄ ÅÏ Á¼ÂÅ ÈÀÅ ÂÉÇÁ¼Áíÿ Å ËÁËÄÁÇÂìí�ÈÅ ´ÉÃÆì Á�ÈÅ ÃÊÊż¼ÁË ÄÅ ¾ �ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä æ ÃÆÆ ÅÄ�Å ¹·Õ#¹Ö½×Ø æËü�Å ¼ÈÉ ÖÙÐ °ÇÈÉÀÁ¼¼ÃÀ Äż ÂFÆ Å¼ Å Äż °ÇÀÊÂÁÇÀ¼ ¾Å ÄÁÃÁ¼ÇÀ ÃÌÅÊ ÖÙÐ � Äà ÿ ÃÀÁíÉÅ ¾Å ½Ð Î Íż ¾ÅÈÏ ¾ÅÉÀÁíÉżËÁËÄÁÇÂìí�Èż ÈÂÁÄÁ¼ÅÀÂ Æ ÇÈÉ Äà ÄÁÃÁ¼ÇÀ ÃÌÅÊ ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä ¾Å¼ ÂÉÃÁ¼ É�ÊÅÀ¼ ¾È ÄÃÀ´Ã´Å ÊÇÿÿ Å Äż ÄÃË Åļ æ ÄżÃÉ´Èÿ ÅÀ¼ ÇÆÂÁÇÀÀÅļ Å Äż ÌÃÉÁÃÀ¼ Î �� Ãȼ¼Á Äà ÊÇÀÀÃÁ¼¼ÃÀÊÅ ¾Å Äà ËÁËÄÁÇÂìí�ÈÅ ¾ �ÇÉÁ´ÁÀŠż À�Êż¼ÃÁÉÅ Æ ÇÈÉÄà ÊÇÀ¼ÂÉÈÊÂÁÇÀ ¾ �ÈÀÅ ÁÀÂÅÉ°ÃÊÅ ÅÀ ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä Î ÍÅÂÂÅ ¾Á¸ ÊÈÄÂ� ¾Å ÊìÇÁÏ ¾ �ÈÀÅ ËÁËÄÁÇÂìí�ÈÅ ´ÉÃÆì Á�ÈÅÀ �ż Æü ¾ÁÉÅÊÂÅÿ ÅÀ ÄÁ�Å ÃÈ ÄÃÀ´Ã´Å ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä ÿ ÃÁ¼ ËÁÅÀ � Äà ÊÇÿÆÄÅÏÁÂ� ÊÉÇÁ¼¼ÃÀÂÅ ¾Å Ä �ÁÀÂÅÉÃÊÂÁÇÀ¾Å¼ ÆÉÇ´ÉÃÿÿ ż ÃÌÅÊ Ä �ÈÂÁÄÁ¼ÃÂÅÈÉ Î �Å ÄÃÀ´Ã´Å ÆÉÇÆÉÁ�ÂÃÁÉÅ ÔÊÇÄ Ã ÊÇÀÀÈ Æ ÅÀ¾ÃÀ ¼Ã ÊÇÈÉÂÅ ÅÏ Á¼ÂÅÀÊÅ ÊÇÿîÿ ÅÉÊÁÃÄÅ ÃÈ ÿ ÇÁÀ¼ ÂÉÇÁ¼ ÌÅɼÁÇÀ¼ ÁÀÊÇÿÆÃÂÁË Äż Æ ÇÈÉ ¼Å¼ ÁÀÂÅÉ°ÃÊż Î ³ÃÌà à ÁÀÂÉǾÈÁ ¾í¼ ¼Ã ÆÉÅÿ ÁíÉÅ ÌÅɼÁÇÀÄ �`ÒÑ ÚÛ½ �ÈÁ à ¼ÈËÁ ¾Å¼ ÊìÃÀ´Åÿ ÅÀ¼ ÁÿÆ ÇÉÂÃÀ¼ Æ ÇÈÉ Äà ´Å¼ÂÁÇÀ ¾Å¼ �Ì�ÀÅÿ ÅÀ¼ Å ż ÅÀ ÆÃÉÂÁÅ ¾ÇÈËÄ�ÅÆÃÉ Äà ÀÇÈÌÅÄÄÅ ËÁËÄÁÇÂìí�ÈÅ ÜÝ Þßà ÂÇȯ ÇÈɼ ÆÉÇÆ Ç¼�Å ÆÃÉ Ôáâ ÎçÀ ÉÅÀÊÇÀÂÉÅ ÅÀ °ÃÁ ¾ÅÈÏ ÆÉÇËÄíÿ ż Î �Å ÆÉÅÿ ÁÅÉ Å¼Â ¾Å ¼ �ÁÀÂÅÉ°ÃÊÅÉ ÊÇÉÉÅÊÂÅÿ ÅÀ ÃÌÅÊ ÈÀÅ ËÁËÄÁÇÂìí�ÈÅÅÏ Á¼ÂÃÀÂÅ ÅÂ Æ ÇÉÂÃËÄÅ Î Í �ż ÅÀ Éí´ÄÅ ´�À�ÉÃÄÅ ÃÂÂÅÁÀ Π�à ¾ÅÈÏÁíÿ Å ¾Á¸ ÊÈÄÂ� ż ¾ �ÁÀÂ�´ÉÅÉ ¾ÃÀ¼ ÄÅ ÿ ǾíÄÅ¾È ÄÃÀ´Ã´Å ç˯ ÅÊÂÁÌÅ ÍÃÿ Ä Êż ÀÇÈÌÅÄÄż °ÇÀÊÂÁÇÀÀÃÄÁÂ�¼ Î »Â Ä� æ Äà ÊìǼŠż ÿ ÇÁÀ¼ ËÁÅÀ É�ȼ¼ÁÅ Î »À °ÃÁ ÁÄÀ �ż Æü À�Êż¼ÃÁÉÅ ¾Å Æ ÇÈÌÇÁÉ ÈÂÁÄÁ¼ÅÉ ÂÇÈÂż Äż °ÇÀÊÂÁÇÀÀÃÄÁÂ�¼ ¾ �ÈÀÅ ËÁËÄÁÇÂìí�ÈÅ ´ÉÃÆì Á�ÈÅ ÅÏ Á¼ÂÃÀÂÅ ÿ ÃÁ¼ÆÄÈÂ� �ÈÅ Ä �ÇÀ ÇËÂÁÅÀÀÅ ÃÈ ¿ÀÃÄ ÈÀÅ Ë ÇÀÀÅ ÁÀÂ�´ÉÃÂÁÇÀ ¾ÃÀ¼ ¼ÇÀ ÄÃÀ´Ã´Å ÆÉ�°�É� ÎçÀ ÉÅÂÉÇÈÌÅ ÊÅÂÂÅ ÆÉÇËÃËÄÅ ÂÉÇÆ ´ÉÃÀ¾Å ¾ÁÌÅɼÁÂ� Æ ÇÈÉ ¾ �ÃÈÂÉż ÄÃÀ´Ã´Å¼ °ÇÀÊÂÁÇÀÀÅļ ÊÇÿÿ Å ÆÃÉ ÅÏÅÿÆÄÅ

� üãÅÄÄä Çå Ä �ÇÀ ¾�ÀÇÿËÉÅ Æü ÿ ÇÁÀ¼ ¾ �ÈÀÅ ¾ÁæÃÁÀÅ ¾ �ÁÀÂÅÉ°ÃÊż ´ÉÃÆì Á�Èż ¾ÇÀ ¾Å¼ ÄÁÃÁ¼ÇÀ¼ ÃÌÅÊ ½Ð æ ÖÙÐÅ ÝçÛ ÞßèéÝ êµ GÈÀÅ ÁÀÂÅÉ°ÃÊÅ Æ ÇÉÂÃËÄÅ ¼ÈÉ Äż ÆÉÁÀÊÁÆÃÈÏ ¼F¼Âíÿ ż ¾Å °ÅÀëÂÉżH ÿ ÃÁ¼ Ãȼ¼Á ¾Å¼ ËÁËÄÁÇÂìí�ÈżÆÃÉÂÁÊÈÄÁíÉż ÆÄȼ °ÇÀÊÂÁÇÀÀÅÄÄż ÊÇÿÿ Å ´È¾´Å¼ ÇÈ ´ÉÃÀ Æ ÇÈÉ Äż ÃÀÁÿ ÃÂÁÇÀ¼ Îì ÃÀ¼ Äà ÿ żÈÉÅ Çå Äż � �í ¼ÈÁÌÅÀ ÈÀ ÿ ǾíÄÅ Ç˯ Å ÇÀ Æ ÅÈ ¼Å ¾Åÿ ÃÀ¾ÅÉ ÃÄÇɼ ¼Á ÄÅ ÿ ǾíÄÅ °ÇÀÊÂÁÇÀÀÅÄ Å¼ÂÃÆÆÉÇÆÉÁ� Æ ÇÈÉ Å®ÅÊÂÈÅÉ ÊÅ ´ÅÀÉÅ ¾Å ÂîÊìż Î �à ÊÇÀ¼ÂÉÈÊÂÁÇÀ ¾ �ÈÀÅ ÁÀÂÅÉ°ÃÊÅ ´ÉÃÆì Á�ÈÅ Æ ÅÈ ëÂÉŠü¼Áÿ ÁÄ�Å � ÄÃÊÇÿÆ Ç¼ÁÂÁÇÀ ÃÈ ¼ÅÀ¼ °ÇÀÊÂÁÇÀÀÅÄ ¾Å¼ ¾Á®�ÉÅÀ¼ ÊÇÿÆ Ç¼ÃÀ¼ �ÈÁ Äà ÊÇÀ¼ÂÁÂÈÅÀ Π�Å ÂÉÃÁÂÅÿ ÅÀ ¾Å¼ �Ì�ÀÅÿ ÅÀÂ¼Æ ÅÈ ëÂÉÅ Å® ÅÊÂÈ� ÆÃÉ ¾Å¼ °ÇÀÊÂÁÇÀ¼ É�ïÅÏż GXð Z ZnðXpH ÄÁ�ż ÃÈ ÊÇÿÆ Ç¼ÃÀ ΠÔÅÈÄÅ Ä �ÅÏÂÅÀ¼ÁÇÀ ¾Å¼ ÊÇÿÆǼÃÀ¼´ÉÃÆì Á�Èż ÅÏÁ¼ÂÃÀ¼ À�Êż¼ÁÂÅ ÈÀÅ ÅÏÂÅÀ¼ÁË ÁÄÁÂ� ÊÇÉÉÅ¼Æ ÇÀ¾ÃÀ ¾ÃÌÃÀÂôŠÃÈ ÿ ǾíÄÅ ¾Å ÆÉÇ´ÉÃÿÿ ÃÂÁÇÀ ÆÃÉÇ˯ Å ÎÒÇÈÉ ÀÇÂÉÅ ÆÉÇÆ Ç¼ ¼ÈÉ ÄÃ Æ ÇÉÂÃËÁÄÁÂ� æ ÄÅ ÊìÇÁÏ ¾Å à\·ñ] Þòê ¼ÅÿËÄÅ ÄÅ ÆÄȼ ÉÇËȼÂÅ ÿ ëÿ Å ¼Á ¼Å¼ Æ Ç¼¼ÁË ÁÄÁÂ�¼¼ÇÀ ÉżÂÉÅÁÀÂż έó Æòúôó ÷ Èú÷ ÊÉÌ�¯���0ô� «õô��ö � «õ÷���øô «�� «ùú û��0�û�R�üRûR�ü RS�õ «U�ö R¼��� «U��õ�RR «��SûR�ü������¾��� «�ý� ����� � «��Sû

Page 122: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

¦§² § f¬ v¥¤©Z[¥ �¤Zedfþÿ¥ e «¤vZ�­¥ BBP� ���� � �������� ����� ���

� ÁÅÀ �ÈÅ ¾Å Ëü ÀÁÌÅÃÈ � à\·ñ] Þòê ż ÆÉÇËÃËÄÅ� ÅÀÂ Ä �ÁÀÂÅÉ°ÃÊÅ �ÈÅ Ä �ÇÀ ÉÅÀÊÇÀÂÉÅ ÄÅ ÆÄȼ °É��ÈÅ� ÅÀ ¾ÃÀ¼Äż ÆÉÇ´ÉÃ�� ż �˯ ÅÊÂÁÌÅ ÍÃ� Ä Î » ÄÄŠż � ÇÀÇ�°ÅÀëÂÉÅ Å ÃÈÂÇÉÁ¼Å ÈÀÅ ÁÀÂÅÉÃÊÂÁÇÀ ¼Á�ÆÄÅ ÃÌÅÊ Ä �ÈÂÁÄÁ¼ÃÂÅÈÉ Î�à ¿´ÈÉÅ ^ ÎB ø Ê�Å Äà ¿À ¾Å ÆÃÉÂÁÅ ¾È ¯ ÅÈ ÜÙéß# #ßà# ¾Å ! ÅÁÀÅÉ " ÁÀæÁÃ# ÂÁÉ� ¾Å $8 B% Î � �ø Ê�ôŠż ŮÅÊÂÈ�¼Çȼ &�' ÁÀ¾Ç( Î

)*+ , ^ ÎB - ÔÂÇÀÅ. ÅÀ´Å G&�( ÁÀ¾Ç( HÍ�Ã�ÈÅ ÆÁ/ÊÅ ÉÇÀ¾Å ÀÈ��ÉÇÂ�Å Ã �Â� ¼�ÄÅÊÂÁÇÀÀ�Å 0 Äà ¼ÇÈÉÁ¼ ÆÈÁ¼ ÆÄÃÊ�Å ¼ÈÉ ÄÅ ÆÄÃÂÅÃÈ ¾È ¯ ÅÈ Î �à ¼�ÄÅÊÂÁÇÀ¾ �ÈÀÅ ÆÁ/ÊÅ Ã �Â� É�ÃÄÁ¼�Å ÆÃÉ ÄÅ ÆÉÇ´ÉÃ�� Å �ÈÁ ¾�ÂÅÉ� ÁÀÅ ¼ÅÄÇÀ Äż ÊÇ ÇɾÇÀÀ�ż ¾È ÊÄÁÊ ¼ÇÈÉÁ¼ ¼Á ÈÀÅ ÆÁ/ÊÅÄÁËÉÅ ÊÇÉÉÅ¼Æ ÇÀ¾ Îì ÃÀ¼ $8 B% ÀÇȼ ÃÌÇÀ¼ ż¼ÃF� ¾Å ÊÇÀ¼ÂÉÈÁÉÅ ÃÈ ¾Å¼¼È¼ ¾Å à\·ñ] Þòê ÈÀÅ ËÁËÄÁÇÂ�/�ÈÅ ¾Å ÆÄȼ �ÃÈ ÀÁÌÅÃÈÃÆÆ ÅÄ�Å 12 34 Î 5ÇÁÊÁ ¼Ã ¾Å¼ÊÉÁÆÂÁÇÀ

6 78998 :; 98<= ð>8 ? <ð@ A:hB8 C ð;:@ BD8 E8F �>GC@GFð;9F�H �; >GC@GFð;9 8F9 B;8 IG;8 E8 Dð = 8; ~9<8@ <:;>:@ð D8 hB: @ 8B9 ~9<8 ð� >A {8J Eð;F B; >8<9ð:; >G;98K 98 ? <ð@ A:hB8J 89 9<ð:98< E8F {L{;8C 8;9FhB: DB: FG; 9 E8F9:; {F H í D M ð @ <:; >:@ ð D8C 8;9 E8BK 9M@ 8F E8 >GC@GFð;9F � D8F >GC@GFð;9F F:C@ D8FJ>GCC 8 B; NGB9G; E8 >G;O <C ð9:G; GB B; 8 IG; 8 E8 Fð:F:8 E PB; 98K 98J 89 D8F �>G;98; 8B<F� hB:ð>>8@ 98;9 E8 <8>8LG:< Eð;F D8B< I G;8 E PðB9<8F >GC@GFð;9F H �; >GC@GFð;9 ;8 @ 8B9 ~9<8 ð99ð>A { hB P}B; F8BD >G;98; 8B< H Q P:; 98<= ð>8 E PB;8 ð@@ D:>ð9:G; E8L:8;9 ð DG<F B; ð<N<8 EG;9 Dð <ð>:; 8 >G<<8F@G;EðB >G;98; 8B< @ <:;>:@ð D RDð = 8; ~9<8 ? <ð@ A:hB8S J D8F ;TBEF FG;9 E PðB9<8F >G;98; 8B<F 89 D8F = 8B:D D8F E8F>GC@GFð;9F F:C@ D8F GB E8F >G;98; 8B<F Fð;F E8F>8;Eð;9H 78998 ð<NG<8F>8;>8 = ð>:D:98 Dð @ <G@ð? ð9:G;E8F {L{; 8C 8;9F @ <GEB:9F @ð< D P:; 98<ð>9:G; ðL8> D PB 9:D:Fð98B<H U : B; >GC@GFð;9 <8�G:9 B; {L{; 8C 8;9J:D L{<:O 8 F: D PB; E8 F8F E8F>8;Eð;9F @ 8B9 D8 9<ð:98<J F: GB: :D D8 DB : 8;LG:8 89 F:;G; :D 8V 8>9B 8 D Pð>9:G;ðFFG>:{8 } >89 {L{;8C 8;9H W

�ż ÃÆÆÄÁÊÃÂÁÇÀ¼ ÊÇÀ¼ÂÉÈÁÂż ÃÈ ¾Å¼¼È¼ ¾ �áÒÑ ÊÇ�Æ Ç¼ÅÀ ÆÄȼ °ÃÊÁÄÅ� ÅÀÂ Ä �ÁÀÂÅÉ°ÃÊÅ Å ¼ÇÀ ÁÀÂÅÉÃÊÂÁÇÀ ÅÀ ÈÂÁ�ÄÁ¼ÃÀ Äà ´Å¼ÂÁÇÀ ¾Å¼ ÊÇ�Æ Ç¼ÃÀ¼ Å ¾Å¼ �Ì�ÀÅ� ÅÀ¼ ÆÉ�¾�¿ÀÁ¼ Î �à ¿´ÈÉÅ ^ ÎQ � ÇÀÂÉÅ Ä �ÅÏÅ�ÆÄÅ ¾È ÊÇÀÌÅÉÂÁ¼¼ÅÈÉX��� YõZ [\[] Y _`abc dcefec gbechijkc l

Page 123: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

mmn odpefv¤¥ ¦§ ¨f©© ÿªf«¬ ¨ qpee­fopvf«¬ª°ÉÃÀʼ�ÅÈÉǼ Î

)*+ , r Îs - ÍÇÀÌÅÉÂÁ¼¼ÅÈÉ tÉÃÀʼ�»ÈÉǼ u&�( ÁÀ¾Ç( v

wÈÃÂÉÅ ÂxÆ Å¼ ¾Å ÊÇ�Æ Ç¼ÃÀ¼ ÃÆÆÃÉÃÁ¼¼ÅÀ y ¾ÅÈÏ ÄÃË Åļ utÉÃÀʼ Å »ÈÉǼv � ÈÀÅ ÄÁ¼ÂÅ ¾Å Ê�ÇÁÏ uz{ � |zv � ¾ÅÈÏÊ�Ã�Ƽ ¾Å ÂÅÏÂÅ Å ÈÀ Ë ÇÈÂÇÀ 0 ÊÄÁ�ÈÅÉ Î ÔÈÉ ÊÅ ÅÏÅ�ÆÄÅ ÄÅ ÆÉÇ´ÉÃ�� Å ÊÇÉÉÅ¼Æ ÇÀ¾ 0 Ä �ÁÀÂÅÉ°ÃÊÅ ´ÉÃÆ� Á�ÈÅuÅÀÌÁÉÇÀ ¾ÅÈÏ Æôż ¾Å ÄÁ¼ÂÁÀ´ v Å ÄÅ ÊÃÄÊÈÄ ÆÉÇÆÉÅ� ÅÀ ¾Á 0 ÈÀÅ ÄÁ´ÀÅ Î

�à ÆÉÇ´ÉÃ�� ÃÂÁÇÀ �Ì�ÀÅ� ÅÀÂÁÅÄÄÅ 0 Äà ¾Á® �ÉÅÀÊÅ ¾Å Äà ÆÉÇ´ÉÃ�� ÃÂÁÇÀ °ÇÀÊÂÁÇÀÀÅÄÄÅ u�ÈÁ ÊÇ�Æ Ç¼Å ÄżÊÃÄÊÈļv Å ¾Å Äà ÆÉÇ´ÉÃ�� ÃÂÁÇÀ Á�Æ �ÉÃÂÁÌÅ u�ÈÁ ÂÉÃÌÃÁÄÄÅ ÅÀ ¼��ÈÅÀÊÅv ÃÂÂÅÀ¾ ÈÀ �Ì�ÀÅ� ÅÀÂ Æ ÇÈÉ ÄÅ ÂÉÃÁÂÅÉ ÎÍÅ ÂÉÃÁÂÅ� ÅÀ Ů ÅÊÂÈÅ ÈÀÅ ÃÊÂÁÇÀ ÅÀ � ǾÁ¿ÃÀ ÈÀ �ÂàŠÅÀ É�Æ ÅÉÊÈÂÃÀ ÊÅÂÂÅ � ǾÁ¿ÊÃÂÁÇÀ ÃÈÏ ÃÈÂÉżÊÇ�Æ Ç¼ÃÀ¼ Î � �ÅÏÆ �ÉÁÅÀÊÅ ¾ �áÆÁ à � ÇÀÂÉ� �ÈÅ Äż ÌÃÄÅÈɼ °ÇÀÊÂÁÇÀÀÅÄÄż Æ ÅÉ� ÅÂÂÃÁÅÀ °ÃÊÁÄÅ� ÅÀ ¾ �ü¼ÇÊÁÅɾż É�ïÅÏż ÃÈÏ ÊÇ�Æ Ç¼ÃÀ¼ Î � �ÅÀÌÁÉÇÀÀÅ� ÅÀ ¾ �ÈÀÅ °ÅÉ� ÅÂÈÉÅ ÊÃÆÂÈÉÅ Ä ��Âà0 � ǾÁ¿ÅÉ Å ÉÅÀÌÇÁÅ ÊÅÂÂÅÁÀ°ÇÉ� ÃÂÁÇÀ ÆÃÉ ÉÃÆÆ ÇÉ ÃÈÏ ÊÇ�Æ Ç¼ÃÀ¼ ¾�Æ ÅÀ¾ÃÀ ¾Å ÊÅÄÈ Á�ÊÁ Î à}·ñ~ Þòê ż ÅÀ � ë� Å ÂÅ�Ƽ ¾Å ÂÉÇÆ ËüÀÁÌÅÃÈ Å ¾Å ÂÉÇÆ �ÃÈ ÀÁÌÅÃÈ Æ ÇÈÉ Äà ÊÇÀ¼ÂÉÈÊÂÁÇÀ ¾ �ÈÀÅ � �íÎ � �Á�Æ Ç¼¼ÁË ÁÄÁÂ� ¾ �ÇÈÌÉÁÉ ÆÄȼ ¾ �ÈÀÅ °ÅÀëÂÉŠżÂÂÉÇÆ ÄÁ� ÁÂÃÀ Å Äà ´Å¼ÂÁÇÀ ¾Å¼ �Ì�ÀÅ� ÅÀ¼ ż ¾�¯ 0 ¿´�Å Îì ÃÀ¼ Äà ÊÇÀ¼ÂÉÈÊÂÁÇÀ ¾ �ÈÀÅ ÁÀÂÅÉ°ÃÊÅ ¾ �ÈÀ ÆÉÇ´ÉÃ�� Å ÇÀ ż¼ÃÁÅ ¾Å ¼�ÆÃÉÅÉ Ä �ÁÀÂÅÉÃÊÂÁÇÀ ¾È ÊÃÄÊÈÄ Î �Å � Ǿ/Äű5Í Á¼¼È ¾È � ÇÀ¾Å Ç˯ ÅÂ Æ Çȼ¼Å 0 ÈÀÅ ¼�ÆÃÉÃÂÁÇÀ °ÇÉÂÅ ÅÀÂÉÅ ÄÅ � Ǿ/ÄÅ u�ÈÁ ÊÇÀÂÁÅÀÂ Ä ��ÂàŠŮÅÊÂÈÅ ÄżÊÃÄÊÈļv ¾Å Äà ÌÈÅ �ÈÁ ø Ê�Å Äà ÆÃÉÂÁÅ ÌÁ¼ÁË ÄÅ ¾Å ÊÅ �Âà¾È ÊÇÀÂÉ� ÄÅÈÉ �ÈÁ ´/ÉÅ Äż ÃÊÂÁÇÀ¼ ÈÂÁÄÁ¼ÃÂÅÈÉ Î ÍÅÄÃÆ ÅÉ� Å ¾Å � ǾÁ¿ÅÉ ÃÁ¼�� ÅÀ Äà ÆÃÉÂÁÅ ÌÁ¼ÈÅÄÄÅ Å ÁÀÂÅÉÃÊÂÁÌÅ ¼ÃÀ¼ � ǾÁ¿ÅÉ ÄÅ ÊǾŠ¾Å¼ ÊÃÄÊÈļ Î âÇȼ ÃÄÄÇÀ¼ÈÂÁÄÁ¼ÅÉ ÈÀÅ ÌÅɼÁÇÀ Ä�´/ÉÅ ¾Å ÊÅ � Ǿ/ÄÅ Æ ÇÈÉ ¼Á�ÈÄÅÉ à}·ñ~ Þòê ÅÀ �ÃÌà ¾ÃÀ¼ ÄÅ ËÈ ¾ �ÁÀÂÅÉ°ÃÊÅÉ Äà ÌÁ¼ÁÇÀÀÅȼÅ�¹�� Þ ËîÂÁÅ ¼ÈÉ ÊÅÂÂÅ ËÁËÄÁÇÂ�/�ÈÅ Î� ���� �� � ������ �� �� � � � �� �

¯ìÌÁ ż ÈÀÅ ÌÁ¼ÁÇÀÀÅȼŠè� Þ� uÌÇÁÉ ¿´ÈÉÅ r Înv ÊÇÀ¼ÂÉÈÁÂÅ 0 ÆÃÉÂÁÉ ¾Å �¹�� Þ�� �ÊÉÁÂÅ ÅÀ �˯ ÅÊÂÁÌÅ ÍÃ� ÄÁ�ÈÅ Ä �ÇÀ à � ǾÁ¿�Å Æ ÇÈÉ Ä �ÁÀÂÅÉ°ÃÊÅÉ ÃÌÅÊ �ÃÌà ´ÉîÊÅ 0 � ��·ò·}� Î ÍÅÂÂÅ ÁÀÂÅÉ°ÃÊŠż ÊÇÀ�ÈÅ ¾ÃÀ¼ ÈÀ ¼Ê��� ñ Ǿ/ÄÅ�5ÈÅ�ÍÇÀÂÉ� ÄÅÈÉ Î �ż ÆÃÉÂÁż 65ÈÅW Å 6ÍÇÀÂÉ� ÄÅÈÉW ÇÀ �Â� ¼�ÆÃÉ�ż ¾Å � ÃÀÁ/ÉÅ ÅÏÆÄÁÊÁÂÅ Î � �Ç˯ Å Ö} z�éßÙ}é¹�} ÊÇÀÂÁÅÀ ÈÀÅ ¿ ÄÅ ¾ �ÃÂÂÅÀÂÅ ¾ ��Ì�ÀÅ� ÅÀ¼ � ÁÀÂÅÉÉÇ´�Å É�´ÈÄÁ/ÉÅ� ÅÀ ÆÃÉ ÄÅ 6±Ç¾/ÄÅW Å Ö}� Þ�Ý Å¼ÂÈÀ �·ß�·ê ÚÛ½ Î ÍÅÂÂÅ ¼�ÆÃÉÃÂÁÇÀ Æ ÅÉ� Å ÀÇÂÃ�� ÅÀ ÈÀÅ °ÇÁ¼ ÄÅ ÆÉÇ´ÉÃ�� Å ÊÇ�ÆÁÄ� � ¾Å � ǾÁ¿ÅÉ Ä �ÁÀÂÅÉ°ÃÊÅÅÀ ÀÅ ÂÇÈÊ�ÃÀ �È �ÃÈÏ ¿Ê� ÁÅɼ �ÃÌà Å ¼ÃÀ¼ ÉÅÆü¼ÅÉ ÆÃÉ ÈÀÅ Æ�üŠ¾ ��¾ÁÂÁÇÀ ¾Å ÄÁÅÀ¼ µ ÄÅ ÆÉÇ´ÉÃ�� Å ÅÀ´ÅÀ¾É�Ì�ÉÁ¿ Å 0 Ä �ÁÀ ÁÂÁÃÄÁ¼ÃÂÁÇÀ Äà ¾Á¼Æ ÇÀÁËÁÄÁÂ� ¾Å¼ ��Â�Ǿż ¾�¿ÀÁż ¾ÃÀ¼ Ä �í�Q u¿´ÈÉÅ r Î�v Î � �ÁÀÂÅÉ°ÃÊÅ �¹�� Þ �¾�ÊÄÃÉ�Å ÊÃÄÄËÃÊã � Æ ÅÉ� Å ¾ �ÈÂÁÄÁ¼ÅÉ ¾ÅÆÈÁ¼ �ÃÌà ÈÀ Ç˯ Å Á�ÆÄÃÀÂ� ÅÀÂÁ/ÉÅ� ÅÀ ÅÀ �˯ ÅÊÂÁÌÅ ÍÃ� Ä y Ê �ż ÄÅÆ ÇÁÀ ¾ �ÃÊÊ/¼ ÃÈ 6±Ç¾/ÄÅWÎ ÍÅ Ç˯ Å ¼ÅÉà ÂÉÃÀ¼� Á¼ 0 �ÃÌà ÄÇɼ ¾Å Ä �ÃÆÆ ÅÄ ÃÈ � ·Þß �ÃÌà Π�à ÊÄü¼Å Ñ� ôŠ�À �ż ÈÂÁÄÅ �ÈÅ Æ ÇÈÉ ÁÀÂÉǾÈÁÉÅ ÈÀ ÂxÆ Å Î

� �ÃÆÆÄÁÊÃÂÁÇÀ ÇËÂÅÀÈÅ À�Êż¼ÁÂÅ Ä �ÁÀ¼ÂÃÄÄÃÂÁÇÀ ¾Å ���»& Æ ÇÈÉ Äà ÊÇÀ¼ÂÉÈÊÂÁÇÀ ¾Å¼ Æ ÇÄÁÊż Î » ÄÄŠż À�ÃÀ�� ÇÁÀ¼ �ÃÈÂÅ� ÅÀÂ Æ ÇÉÂÃËÄÅ Î � ÁÅÀ �ÈÅ à}·ñ~ Þòê ÀÅ ¼ÇÁ Æü Æ ÇÉÂ� ÀÃÂÁÌÅ� ÅÀ ¼Çȼ ± ÃÊ�Ô& � ��� Þ °ÇÀÊÂÁÇÀÀÅÆ ÇÈÉ ÊÅ ¼x ¼Â/� Å Î �À ÀÇÂÅ � ë� Å �È �ÅÄÄŠż ÆÄȼ ÉÃÆÁ¾Å �ÈÅ ¼ÇÀ ��ÈÁÌÃÄÅÀ ¼Çȼ &�' ÁÀ¾Ç( ¼ÈÉ ± ÃÊ�Ô&ÆÉÁÀÊÁÆÃÄÅ� ÅÀÂ Æ ÇÈÉ ÈÀ ÉîÉÃÓÊ� Á¼¼Å� ÅÀ ¾Å¼ °ÅÀëÂÉż � ÇÁÀ¼ ¼x¼Â�� ÃÂÁ�ÈÅ Î

��c� fkc gb�c�cb�cbe l ¡ú]ô [¢¢]£ Y[Z¤[] Y¥¤û¦ö [§ô_¢ûö ¢^¨[ø £ Y© Yª]¤ Y«\

Page 124: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

¦§¬ § Ò�á­ Ñâ ®¥� ¯«ÿ¤ ¨¥ª p¯¯­ ° op±°«¬ª op²­ mm³

ú]£õ]«_ ù]¨] Y]�ª ´£¢]µµ ¶ö ]«_ · ¸ú]£õ]«_ ö ÷ú]£õ ´¹Z]ö _ ö ¢º^¨[ » £]¢¢ü]£õ¼ [Zª_¤¥]£_ ½¢¢¨[ ·¨¾[^ ¤ôZ ¿µª¤[Z« » À¤Á [_� » À¤Â¾Zª¤¾¢_¤ à ´¸£¢]µµ À¤Á [_� ·µª]ª[£ ¥[Z]¢ [Zª ª¤]Z µú ´[Zª � [^ªÄ ´[Zª Ä_[«Äª ´¨¾[^ [Z [ª ¿[Zª »[Zª à ´¨¾[^ £¢_]¤ ¿Ã ´¨¾[^ £¢¾µ_ ¿Ã ´¨¾[^ µ_ªÂ¾¢¾¤ ¿[Zª à ´¨¾[^ ¥[¢¢Å_£ª ¿[Zª » [Zª »[Zª » [Zª à ´¨¾[^ ^¤]� ¶ö ]«_ ¿ù]¨] Y]�ª Y¶ö ]«_ »[Zª » [Zª à ´ù]¨] Y]�ª Y¶ö ]«_ ö ]õ_¶ö ]«_ ¿[Zª ¹¼ »[Zª »[Zª à ´¸

£¢]µµ ¢¨[Ƥ]ö _ ·µª]ª[£ ¨¾[^ ö ][Z ¿½¢¢¨[ » µª¤[Z« ¹¼ à ´¸£¢]µµ Â]ö ¢Ç¨_Zª ·µª]ª[£ ¥[Z]¢ [Zª ÈÇɺÊÅÇËËÇ¢º½ ËÈ ´µª]ª[£ ¥[Z]¢ [Zª ÌÍÎÎÏкÑÏÒк½ÓËÈ ´µª]ª[£ ¥[Z]¢ [Zª ÌÍÎÎÏкÍʺ½ÓËÈ ´µª]ª[£ ¥[Z]¢ [Zª ½ÏÍËǺ½ÏζÏк½ÓËÈ ´¥[Z]¢ [Zª ö ¾ô µ_ºý ´¥[Z]¢ [Zª ö ¾ô µ_º÷ ´¥[Z]¢ ü ¾¾¢_]Z üôªª¾Z ´¥[Z]¢ ü ¾¾¢_]Z õ_÷ú¤_µµ_^ ´¥[Z]¢ £Ä]¤ õ_÷ ´¸

[Zª_¤¥]£_ À¤Â¾Zª¤¾¢_¤ ·Â]ö ¢Ç¨_Zª Ô][ªÌ¢¾£õ [Z«Ð_ýªÇ¨_Zª ¿[Zª à ´Â]ö ¢Ç¨_Zª ú ¾¢¢Ð_ýªÇ¨_Zª ¿[Zª à ´¸

) *+ , r Î� - ÑÀÂÅÉ°ÃÊÅ 5ÈÅ Å ÍÇÀÂÉ� ÄÅÈÉ Æ ÇÈÉ ¯ìÌÁÕ Ö× Ø ÙÚÛÜÝ Þßà áâãä åßæ çáá èéêçëéâìæ íîï ð

áÀÅ ¾Å¼ � ÇÂÁÌÃÂÁÇÀ¼ ¾Å Ä �Å�ËÃÉ�ÈÅ� ÅÀ ¾È 9G@ D8L8D à �Â� ¾Å ÊÇÀ¼ÂÉÈÁÉÅ ÈÀ @ DB? :; ¾ �ÅÏ�ÊÈÂÁÇÀ ¾Å ÆÉÇ�ñÉÃ�� ż �Ë ò ÅÊÂÁÌÅ ÍÃ� Ä Æ ÇÈÉ Äż ÀÃÌÁñÃÂÅÈɼ ó8N �ÈÁ ¼ÇÁ �ÈÄÂÁ�¼x ¼Â/� ż Î �ż ÀÃÌÁñÃÂÅÈɼ ó8N ¼ÇÀ ¾Å¼ÆÉÇñÉÃ�� ż ÄÃÉñÅ� ÅÀ ÈÂÁÄÁ¼�¼ ¾ÇÀÂ Ä �ÁÀÂÅÉôÃÊÅ � ËÁÅÀ �ÈÅ ÆÃÈÌÉÅ � ż ËÁÅÀ ÃÊÊÅÆÂ�Å Î ÑÄ À �ż Æü ¾�ÉÇÈÂÃÀÂÆ ÇÈÉ ÈÀ ÈÂÁÄÁ¼ÃÂÅÈÉ DðCNEð ¾ �ÅÏ�ÊÈÂÅÉ ÈÀ ÆÉÇñÉÃ�� Å ÊÇ�� Å ÈÀÅ ð@@ D89 �ÃÌà ¾ÃÀ¼ ÈÀÅ ôÅÀëÂÉÅ ¾Å ¼ÇÀ ÀÃÌÁñÃ�ÂÅÈÉ Î �ż ôÇÀÊÂÁÇÀÀÃÄÁÂ�¼ ¾ �ÈÀ ÀÃÌÁñÃÂÅÈÉ Æ ÅÈÌÅÀ ëÂÉÅ �ÂÅÀ¾Èż Æ ÇÈÉ ÂÉÃÁÂÅÉ ¾Å ÀÇÈÌÅÃÈÏ ÂxÆ Å¼ ¾Å ¾ÇÀÀ�żÇÈ ¾Å ÆÉÇñÉÃ�� ż ñÉîÊÅ 0 ÈÀ ¼x¼Â/� Å ¾ �ÅÏÂÅÀ¼ÁÇÀ¼ ÁÀÂ�ñÉ� ÇÈ @ DB? :; Î áÀ @ DB? :; ÆÇÈÉ ÈÀ ÄÃÀñÃñÅ ¾ÅÌÁÅÀÂÃÄÇɼ ÈÀ ÌÅÊÂÅÈÉ ¾Å ¾ÁõȼÁÇÀ ¼Á�ÆÄÁ¿ �Å Æ ÇÈÉ Äż ÃÆÆÄÁÊÃÂÁÇÀ¼ �ÊÉÁÂż ¾ÃÀ¼ ÊÅ ÄÃÀñÃñÅ Å ÊÇÀÂÉÁËÈÅ ÃÈ ¼ÈÊÊ/¼¾Å ÊÅ ¾ÅÉÀÁÅÉ Î»À möör � tÉÃÀÊÇÁ¼ !ÇÈÃÁÏ Ã ¾�ÌÅÄÇÆÆ � ÈÀ ÀÃÌÁñÃÂÅÈÉ ''' � ÀÇ��� ÷÷÷ $m�ø% �� Å ÆÉÇÀÇÀÊ� ÷ ÅÈ� � ÆÇÈÉÄà ÄÅÊÂÈÉÅ ¾Å ÆÃñż .�÷� ÅÂ Ä �ÅÏ�ÊÈÂÁÇÀ ¾ �ð@@ D89F Íù÷� Î â ÇÂÉÅ ¾�� ÃÉÊ�Šż ¾Áõ�ÉÅÀÂÅ ¾ÃÀ¼ Äà � żÈÉÅ ÇåÄ �ÇÀ Ê�ÅÉÊ�Å 0 �ÂÅÀ¾ÉÅ ¾Å¼ ÀÃÌÁñÃÂÅÈɼ ÅÏÁ¼ÂÃÀ¼ ñÉÃÀ¾ ÆÈËÄÁÊ ÊÇ�� Å âżÊÃÆ Å Î � �Á¾�Šż ÃÄÇɼ ¾ �Å�ËÃÉ�ÈÅÉÄÅ 9G@ D8L8D �Ë ò ÅÊÂÁÌÅ ÍÃ� Ä ¾ÃÀ¼ ÈÀ @ DB? :; âżÊÃÆ Å $mmø% Î �Å ÆÉÇñÉÃ�� Å �Ë ò ÅÊÂÁÌÅ ÍÃ� Ä Â�Ä�Ê�ÃÉñ� ¼ÅÉÃÂÉÃÀ¼� Á¼ ÃÈ 9G@ D8L8D �ÈÁ ÅÏ�ÊÈÂÅÉÃ Ä �ÃÆÆÄÁÊÃÂÁÇÀ ñÉÃÆ� Á�ÈÅ ¾ÃÀ¼ Äà ôÅÀëÂÉÅ ¾È ÀÃÌÁñÃÂÅÈÉ ÎÍÅÂÂÅ Á¾�Å ÃÌÃÁ �Â� ÅÏÆ �ÉÁ� ÅÀÂ� ÄÇɼ ¾ �ÈÀ �»! �ú $mmû% ÅÀ ÄÃÀ�ÃÀÂ Æ ÇÈÉ Ê�Ã�ÈÅ ÆÉÇñÉÃ�� Å ñÉÃÆ� Á�ÈÅ�Ë ò ÅÊÂÁÌÅ ÍÃ� Ä uÈÂÁÄÁ¼ÃÀ Äà ËÁËÄÁÇÂ�/�ÈÅ à}üñ~ Þòêv Â�Ä�Ê�ÃÉñ� ÈÀ ÆÉÇ Êż¼È¼ 9G@ D8L8D �ÈÁ ÊÇ��ÈÀÁ�ÈÃÁ ÃÌÅÊÄà ôÅÀëÂÉÅ ¾È ÀÃÌÁñÃÂÅÈÉ Î ÍÅÄà ôÇÀÊÂÁÇÀÀÃÁ ¼Çȼ &�' ÁÀ¾Ç( ¾ÃÀ¼ Äà � żÈÉÅ Çå ÈÀÅ ÃÆÆÄÁÊÃÂÁÇÀ Æ ÅÈ ÈÂÁÄÁ¼ÅÉÈÀÅ ôÅÀëÂÉÅ ñÉÃÆ� Á�ÈÅ ¾ �ÈÀÅ ÃÈÂÉÅ ÃÆÆÄÁÊÃÂÁÇÀ ¼Á ÅÄÄÅ ÊÇÀÀÃÓÂ Ä �Á¾ÅÀÂÁ¿ÊÃÂÅÈÉ ¾Å Äà ôÅÀëÂÉÅ ÊÇÀÊÅÉÀ�Å Î ÷ ÃÁ¼Æ ÇÈÉ ¾ �ÃÈÂÉż ¼x¼Â/� ż ¾Å ôÅÀëÂÉÃñÅ ÊÇ�� Å ' ÁÀ¾Ç( ¼ ÇÈ ÷ ÃÊ�Ô& ÊÅÄà À �ż Æü Æ Ç¼¼ÁË ÄÅ Î »À ÉÅÌÃÀÊ�Å ÈÀ9G@ D8L8D Å�ËÃÉ�È� ¾ÃÀ¼ ÈÀ @ DB? :; ÆÇÈÉÉà ÃÊÊ�¾ÅÉ Å ¾Å¼¼ÁÀÅÉ ¾ÃÀ¼ ÈÀÅ ôÅÀëÂÉÅ ¾È ÀÃÌÁñÃÂÅÈÉ ÎÒÇÈÉ ÃÆÆÉ�ÊÁÅÉ ÊÅÂÂÅ ÃÉñÈ� ÅÀÂÃÂÁÇÀ � ÇÀ ¾�ÊÉÁ ÂÇÈ ¾ �ÃË Çɾ ÄÅ ��ÊÃÀÁ¼� Å ¾Å ËüŠ¾Å Ä �ÅÏ�ÊÈÂÁÇÀ ¾ �ÈÀ @ DB? :;Æ ÇÈÉ ÅÀ¼ÈÁÂÅ � ÇÀÂÉÅÉ ÊÇ�� ÅÀ ÄÅ 9G@ D8L8D Æ ÅÈ ÁÀÂÅÉÃñ ÁÉ Ì Áà Äà ËÁËÄÁÇÂ�/�ÈÅ à}üñ~ Þòê ÃÌÅÊ ÈÀÅ ôÅÀëÂÉÅ ¾ �ÈÀÀÃÌÁñÃÂÅÈÉ Î �À ÁÄÄȼÂÉÅ ÊÅÂÂÅ É�ÃÄÁ¼ÃÂÁÇÀ ÆÃÉ ¾Å¼ ÃÆÆÄÁÊÃÂÁÇÀ¼ ÅÏ Á¼ÂÃÀÂż À �ÃxÃÀ Æü ÅÈ Ë Å¼ÇÁÀ ¾ �ëÂÉÅ � ǾÁ¿�ż Π ú]ô [¢¢]£ Y[Z¤[] Y¥¤û¦¤¾ô][ýûööö ýþhjÿj�� �bkj�h�� �c � ck�chk�c l

Page 125: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

mmr o�p¯°±� � � ° ÿ�°�� � qp¯¯� ° op±°���

)*+ , r În - ÍÃÆÂÈÉÅ ¾ ��ÊÉÃÀ ¾Å ��� Þ�À ¾Á¼ÊÈÂÅ ÅÀ¼ÈÁÂÅ ¾Å¼ Ê�ÇÁÏ ¾ �Á�ÆÄÃÀÂÃÂÁÇÀ Å ¾Å¼ ÄÁ� ÁÂÃÂÁÇÀ¼ ¾Å ÊÅÂÂÅ ÆÉÅ� Á/ÉÅ ÁÀÂ�ñÉÃÂÁÇÀ Î� �� �� � �� ���� � � � ��� � ����� ���� � �� �

�Å ÀÃÌÁñÃÂÅÈÉ âżÊÃÆ Å ôÇÈÉÀÁ ÈÀÅ ËÁËÄÁÇÂ�/�ÈÅ ¾Å ¾�ÌÅÄÇÆÆ Å� ÅÀ $mmø% ÆÇÈÉ Äà É�ÃÄÁ¼ÃÂÁÇÀ ¾Å @ DB? :;F Î ìÅÀÇ�ËÉÅÈÏ ÃÈÂÉż ÀÃÌÁñÃÂÅÈɼ � ÊÇ�� Å ÷ ÇæÁÄÄà � "ÇÀ�ÈÅÉÇÉ ÇÈ ÔÃôÃÉÁ � ÈÂÁÄÁ¼ÅÀ ÊÅÂÂÅ ÃÆÆÉÇ Ê�Å 0 Ä �ÅÏÊÅÆÂÁÇÀÉ�ÊÅÀÂÅ Å ÀÇÂÃËÄÅ ¾ �ÑÀÂÅÉÀÅ »ÏÆÄÇÉÅÉ ÎáÀ @ DB? :; Æ ÅÈ ¾Å¼¼ÁÀÅÉ ¾ÃÀ¼ ÈÀÅ ôÅÀëÂÉÅ 0 ÆÃÉ ÇÈ ¾ÃÀ¼ ÈÀÅ ÆÃÉÂÁÅ ¾Å Äà ôÅÀëÂÉÅ ¾È ÀÃÌÁñÃÂÅÈÉ Î �À¼ �ÁÀÂ�Éż¼Å 0 ÊÅ ¾ÅÉÀÁÅÉ Êü Î

�À ÁÀ¾Á�ÈÅ Äà ÆÉ�¼ÅÀÊÅ ¾ �ÈÀ ÆÄÈñ ÁÀ ¾ÃÀ¼ ÈÀÅ ÆÃñÅ .�÷� ÆÃÉ ÈÀÅ ËÃÄÁ¼Å !�"!� uÇÈ #" $!�½ v Î �Å ¼ÇÈÉÊżÈÁÌÃÀ ÁÀ¾Á�ÈÅ ¾ �ÈÂÁÄÁ¼ÅÉ ÈÀ ÆÄÈñ ÁÀ ÂÉÃÁÂÃÀ ¾È ÂxÆ Å ç zòü� %zñ%&àÞß ¾ÃÀ¼ Äà ÆÃñÅ ¾È ÀÃÌÁñÃÂÅÈÉ ¾ÃÀ¼ ÈÀÅôÅÀëÂÉÅ ¾Å ÂÃÁÄÄÅ nøøÏ�øø ÅÀ ÄÈÁ ÅÀÌÇxÃÀ ÄÅ ïÈÏ ÊÇÉÉÅ¼Æ ÇÀ¾ÃÀ ÃÈ ¿Ê� ÁÅÉ òé%Ý~��% '�% y k()*�cc) l�e+ ),ǽÌÇÑ ª÷ú_-]úú ¢[£]ª[¾Z ûý ø£]ö ¢øú ¢ô« [Zµ¤£- .Īªú /ûûÔÔÔ Yúú µ Yùô µµ[_ô Y¥¤û¦_öö ]Zô _¢û£¾¢ÔÄ__¢ Yö ¢ . Ô [^ªÄ-0©© Ä_[«Äª-1©©23 45678 5 98:;<=>?4@ 5 9=@ A BCD EF ùÈ G�� HIIHñJ G �KL LHÌ MñHNJKI � OJPK M�OM PMQNJ PJQ @ DB? :;F GMQR SLMTPJQ JNPJQ JLIJñ MQNIJ JL ôSLONMSL GJQ NxR JQ ÷ Ñ÷U �K �MPQ NIHMNJLN Î wKHLG PJ LHVMñHNJKI IJLOSLNIJ GJQ GSLL�JQ G �KLNxR J ÷ Ñ÷U JLIJñ MQNI� RHI KL @ DB? :; � MP O�HIñJ GxLH� M�KJ� JLN PJ RPKñ ML JL ��� SMIJ uQ �MP L �JQN RHQ G�ò 0O�HIñ�v JN OI�J KLJ LSKVJPPJ MLQNHLOJ GK @ DB? :; Î ÑP R JKN HVSMI RPKQMJKIQ MLQNHLOJQ G �KL @ DB? :; 0 KL � S� JLNGSLL� uRPKQMJKIQ THPMQJQ U÷�Uì GHLQ KLJ � ë� J RHñJ SK RPKQMJKIQ RHñJQ HVJO KLJ NJPPJ THPMQJv Î wKHLGP �KNMPMQHNJKI �KMNNJ PH RHñJ SK G�NIKMN PH ôJLëNIJ P �MLQNHLOJ GK @ DB? :; JQN G�NIKMNJ Î wKHLG NSKNJQ PJQ MLQNHLOJQG �KL RPKñ ML QSLN G�NIKMNJQ � OJPK M�OM JQN PMT �I� GJ PH ��� SMIJ Î�SIQ GJ PH OI�HNMSL G �KLJ MLQNHLOJ G �KL @ DB? :; PJ LHVMñHNJKI PK M MLGM�KJ PJ GJQOIMRNJKI GJ PH ôJLëNIJ ñIHR� M�KJJN QM T JQSML JQN OI�J KL ïSN GJ OS��KLMOHNMSL R SKI NIHLQ� JNNIJ PJQ GSLL�JQ 0 NIHMNJI Î �J @ DB? :; GSMN R SKVSMII�R SLGIJ HKÏ HRR JPQ GJ ôSLONMSL RISVJLHLN GK LHVMñHNJKI Î ÍJ GJILMJI R JKN ëNIJ HKQQM HRR JP� RHI PJ @ DB? :; Î� �WX í GJ G�VJPSRR J� JLN ôSKILMN P �JLQJ�TPJ GJ OJQ ôSLONMSLQ ÎYZ[ 58 5;\874]]8^8@> ÑP x H NISMQ NxR JQ GJ ôSLONMSLQ RI�QJLNJQ GHLQ PH TMTPMSN�/�KJ GJ G�VJPSRR J� JLNGJ â JNQOHR J y

m _ PJQ ôSLONMSLQ GJ O�HIñJ� JLN JN GJ PMT �IHNMSL GK @ DB? :; uRI�`aJ b2cv ds _ PJQ ôSLONMSLQ G �MLNJIôHOJ GK @ DB? :; �KM QJISLN HRR JP�JQ RHI PJ LHVMñHNJKI uRI�`aJ b22cv d 0 �OIMIJ RHI PJRISñIH�� JKI d

Page 126: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�¬ � Ò�á­ Ñâ ®� ¯�ÿ� �� p¯¯� ° op±°��� op²� mme

� _ PJQ ôSLONMSLQ G �MLNJIôHOJ GK LHVMñHNJKI �KM QJISLN HRR JP�JQ RHI PJ @ DB? :; uRI�`aJ b2bcv _�SIQ GJ PH G�NJONMSL G �KLJ RHñJ OSLNJLHLN GJQ GSLL�JQ 0 NIHMNJI RHI KL @ DB? :; � PJ LHVMñHNJKI JõJONKJ PJQHONMSLQ GJ PH `ñKIJ r _³ y

- MP O�HIñJ GxLH� M�KJ� JLN JL ��� SMIJ PJOSGJ GK @ DB? :; uQ �MP LJ P �JQN RHQ G�ò 0v RHIPH ôSLONMSL b2c3ß ÞÙ Þü%Þf� d- MP OI�J KLJ LSKVJPPJ MLQNHLOJ GK @ DB g? :; uôSLONMSL b22cb�Ý v QHO�HLN �KJ RPK�QMJKIQ MLQNHLOJQ R JKVJLN ëNIJ OI��JQ QML�OJQQHMIJ d- MP ML ôSI� J PJ @ DB? :; GJ P �MGJLNM`OHNJKI GJPH ôJLëNIJ ub22cÜ�ÙÛ ÞßèéÝ v d- MP NIHLQ� JN PJQ GSLL�JQ HKa @ DB? :; VMHKL ïKa GJ OS��KLMOHNMSL JN PJQ �V�LJ�� JLNQ QKIVJLHLN GHLQ PH ôJLëNIJ GK @ DB g? :; d

- �KHLG PH RHñJ GJ P �MLQNHLOJ GMQRH�IHÓN P �MLQNHLOJ JQN G�NIKMNJ uôSLONMSLb22c��êÙ}éh v d- �KHLG PH GJILM/IJ MLQNHLOJ G �KL @ DB? :;JQN G�NIKMNJ HPSIQ PJ @ DB? :; JQN G�O�HIñ�GJ PH ��� SMIJ uôSLONMSL b2cÜ~&ÙèéÝß v _

Traitement

DestroyStream

GetMIMEDescription

Shutdown

New

NewStream

Initialize SetWindow

WriteReady Write

)*+ , r _³ - ÔO��� H G �Ja�OKNMSL G �KL @ DB? :;�J @ DB? :; R JKN HPSIQ ñ�IJI PJQ �V�LJ� JLNQ GJ PH ôJLëNIJ �KM PK M JQN HQQS OM�J RHI PJ LHVMñHNJKI JL G�`LMQQHLNQJQ RISRIJQ ôSLONMSLQ GJ NIHMNJ� JLN G ��V�LJ� JLNQ JN G �Hi O�HñJ _

� �� �� j ����� ���� � � ���k� �� � l�� ��� m � ��J @ DB? :; RSKI PJQ HRRPMOHNMSLQ ñIHR� M�KJQ �T ò JONMVJ nH� P QK MN PH G�� HIO�J RI�O�GJLNJ _ oP JQN ôSKILMQSKQ ôSI� J G �KLJ TMTPMSN�/�KJ GxLH� M�KJ u 'êé RSKI áLMa � 'è%% R SKI ' MLGS( Qv _ �SIQ GJ PH GJ� HLGJ GJOI�HNMSL GJ PH RIJ� M/IJ MLQNHLOJ b22cb�Ý P �MGJLNM`OHNJKI GJ PH ôJLëNIJ ñIHR� M�KJ ôSKILMJ RHI PJ LHVMñHNJKIJQN OSLQJIV�J _ p P �JLVSM GJQ GSLL�JQ GHLQ PJ ïKa GJ OS��KLMOHNMSL KL 9G@ D8L8D� OSLQNIKMN QSKQ ôSI� J G �KLJTMTPMSN�/�KJ GxLH� M�KJ � JQN PHLO� _ nJPKM�OM O�HIñJ PH TMTPMSN�/�KJ à}üñ~ Þòê � � JN 0 òSKI PH ôJLëNIJ ñIHR� M�KJRKMQ O�HIñJ PJQ GSLL�JQ RHQQ�JQ GHLQ PJ 9G@ D8L 8D_ �H TMTPMSN�/�KJ à}üñ~ Þòê H �N� � SGM`�J R SKI R SKVSMI ôSIOJIP �MGJLNM`OHNJKI GJ PH ôJLëNIJ uê�ÙcÝ ÞßèéÝcÞè v _Ô[Z - ¿¿Ê¢ô«[Z ¶Z µª]Z £_ qà [Z µª]Z £_ ø2ú^]ª] Ãø2Ô [Z^¾Ô ´µú¤[Zª¥ ¿Ä_]^_¤µ ».À¤]úÄ [£µ Yµ_ªºÔ [Z^¾Ôº[^ r¢ô ´´. »Ô [Z à ´µú¤[Zª¥ ¿µ¤£ ».sô µ_ trµ t ´. »¥Z]ö _ à ´£¾öö ]Z^_µ ¹©¼-Ä_]^_¤µ ´£¾öö ]Z^_µ ¹u¼-µ¤£ ´úªÄ¤_]^º£¤_]ª_ ¿vªÄ¤_]^ » ÐÍww » ¿¨¾[^qê¾ú ¢_¨_¢ºªÄ¤_]^ » ¿¨¾[^qã¾öö ]Z^_µÃ ´

¨¾[^ q ª¾ú ¢_¨_¢ºªÄ¤_]^ ¿£Ä]¤q ]¤« ¹x¼ à · YYY¿qª¾ú ¢_¨_¢º_ý_£Ã ¿]¤« ¹©¼ à ´¿qª¾ú ¢_¨_¢º_ý_£Ã ¿]¤« ¹u¼ à ´ YYY

¸nS�� J RPKQMJKIQ MLQNHLOJQ R JKVJLN ëNIJ PHLO�JQ JN �KJ PH TMTPMSN�/�KJ à}üñ~ Þòê LJ R JKN HGIJQQJI �K �KLJ

Page 127: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

mmû o�p¯°±� � � ° ÿ�°�� � qp¯¯� ° op±°���

QJKPJ ôJLëNIJ ñIHR� M�KJ � MP LJ R JKN RHQ x HVSMI RPKQMJKIQ RISñIH�� JQ �T ò JONMVJ nH� P Q �Ja�OKNHLN GHLQ PJ� ë� J LHVMñHNJKI _ ySKI �VMNJI GJ TPS�KJI PJ LHVMñHNJKI RHI P �Ja�OKNMSL GK RISñIH�� J �T ò JONMVJ nH� P PJPHLOJ� JLN G �KL RISñIH�� J JQN 9A<8ðEz_ â �HL� SMLQ KL QJKP 9A<8ðE JQN HONMô 0 KL � S� JLN GSLL� _

�JQ `ñKIJQ r _r JN r _e � SLNIJLN IJQR JONMVJ� JLN PJQ HRRPMOHNMSLQ ñIHR� M�KJQ òé%é}Ý~��% �{ GHLQ PJ LHVMñHNJKI÷ Sæ MPPH QSKQ &�' MLGS( JN è�� Þß�} $n m% GHLQ PJ LHVMñNJKI t MIJ� MIG QSKQ ' MLGS( Q _

)*+ , r _r - � �HRRPMOHNMSL nSPSI(�JJP QSKQ ÷ Sæ MPPH u&�( MLGS( v

�H QSINMJ GJ �é%é}Ý~��% uHRRKM GJ PH NSKO�J �� �v JõHOJ PH R SINMSL GJ ôJLëNIJ ñIHR� M�KJ GK LHVMñHNJKIHQQS OM�J 0 P �HRRPMOHNMSL �T ò JONMVJ nH� P __

� �� �| m��} � ���� � � ��� ��� � �����J O�SMa GJ PH TMTPMSN�/�KJ ~}üñ~ �òê H �N� Jõ JONK� RSKI QH R SINHTMPMN� _ nJPH STPMñJ 0 L �HVSMI �K �KLJ QJKPJHRRPMOHNMSL ñIHR� M�KJ Q �Ja�OKNHLN JL � ë� J NJ�RQ RHIOJ �KJ OJNNJ TMTPMSN�/�KJ LJ QHMN ñ�IJI �K �KLJ QJKPJôJLëNIJ _ nJ @ DB? :; JQN JL ôHMN � SLS� 9A<8ðE _ìK R SMLN GJ VKJ Q�OKIMN� GJQ RISñIH�� JQ N�P�O�HIñ�Q � PH OS�RMPHNMSL GJQ QSKIOJQ ñHIHLNMN �KJ PJ OSGJ�SONJN

Ja�OKN� JQN OSIIJON uGHLQ PH � JQKIJ Så PH TMTPMSN�/�KJ 9G@ D8L8Dv P �JQN _ ! MJL L �J�R ëO�J RHI HMPPJKIQ GJ O�HIñJIGK OSGJ�SONJN _ �JQ NJ�RQ GJ NIHLQôJIN JN OS�RMPHNMSL G �KL NJaNJ QSKIOJ QSLN PJ RPKQ QSKVJLN ��KMVHPJLNQ HKaNJ�RQ GJ NIHLQôJIN JN GJ O�HIñJ� JLN GK OSGJ�SONJN _ �SKNJQ PJQ ôSLONMSLQ GJ PH TMTPMSN�/�KJ QNHLGHIG QSLNHOOJQQMT PJQ � x OS�RIMQ PJQ PJONKIJQ��OIMNKIJQ GJ `O� MJIQ _ �LJ � HLM/IJ G �x IJ��GMJI JQN GJ QKMVIJ PJQ PM� MNHNMSLQGJ PH ê�è%�� OS�� J RI�QJLN�JQ R SKI ÷÷÷ _� �HRRPMOHNMSL ñIHR� M�KJ GSMN ëNIJ OSLNJLKJ GHLQ KL QJKP `O� MJI QSKIOJ _ �LJ �VSPKNMSL JQN GJ R SKVSMI N�P��O�HIñJI GJQ `O� MJIQ G �KL QJIVJKI L:ð PH RIM� MNMVJ &ê� JL HxHLN HOO/Q 0 P ��!� GK QJIVJKI _ � £]ö ¢ Y[Z¤[] Y¥¤ûÇý]öú ¢_µû_Z« YĪö ¢

Page 128: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�� � � ��±�²� �¯� o° °þÿ� mmö

) *+ , r _e - � �HRRPMOHNMSL �J� MLJI QSKQ t MIJ� MIG u' MLGS( Qv

Õ Ö� ��æë�� ßæ æá �êé��ãßæ

nS�� J TMJL QSKVJLN P �SL G�QMIJ RIS`NJI GJ P �JLQJ�TPJ GJQ R SQQMT MPMN�Q SõJINJQ RHI KL Qx QN/� J G �JaRPSMNHNMSLJN QSL Qx QN/� J GJ ñJQNMSL GJ ôJL�NIJQ NSKN JL �NHLN R SINHTPJ _ �SKQ LSKQ MLN�IJQQSLQ MOM HKa RHINMOKPHIMN�Q GJGMõKQMSL JN GJ I�ñ MSLHPMQHNMSL GJQ QxQN/� JQ ÷ HO��& JN ' MLGS( Q R SKI JL NMIJI GJQ JLQJMñLJ� JLNQ R SKI GJQQSPKNMSLQ R SINHTPJQ _

� �| �� ��� ��� ���� � �l���m� �� �JQ HRRPMOHNMSLQ G�VJPSRR �JQ QSKQ ÷ HO��& SLN �N� OI��JQ PJ RPKQ QSKVJLN HVJO PJQ SKNMPQ yISò JON �KMPGJIHQQS OM� 0 oLNJIôHOJ �KMPGJI MQQKQ GK � SLGJ �J&� _ U PPJQ QSLN �OIMNJQ JL �T ò JONMVJ n � JaNJLQMSL ST ò JN 0 PH

�� HPP�HP� GJ n _ �LJ HRRPMOHNMSL OSLNMJLN GJQ `O� MJIQ GJ IJQQSKIOJ � GJQ G�OPHIHNMSLQ GJ PMQNJ GJ RISRIM�N�QJN PJ OSGJ Ja�OKNHTPJ _ nJN JLQJ�TPJ GJ `O� MJIQ JQN IJñISKR � GHLQ KL OHNHPSñKJ JN GJQ QSKQ�OHNHPSñKJQ _ �JQIJQQSKIOJQ OSLNMJLLJLN JL RHINMOKPMJI P �JLQJ�TPJ GJQ NJaNJQ GJ P �MLNJIôHOJ _ nJKa �OM R JKVJLN HPSIQ �NIJ HGHRN�Q0 KLJ HKNIJ PHLñKJ R SKI KLJ GMõKQMSL �KPNM�PHLñKJQ _ oP L �JQN RHQ L�OJQQHMIJ GJ IJOS�RMPJI P �HRRPMOHNMSL _ �JO�SMa GJ PH PHLñKJ G�NJI� MLJ P �J�RPHOJ� JLN GJ PH IJQQSKIOJ 0 J�RPSxJI _ �JQ O�H�LJQ GJ OHIHON/IJQ GJQ NJaNJQQSLN QNSO��Q QSKQ ôSI� J G �ST ò JNQ �T ò JONMVJ n GHLQ GJQ `O� MJIQ GJ PHLñKJQ _ ùK PHLOJ� JLN G �KLJ HRRPMOHNMSLOJQ ST ò JNQ QSLN O�HIñ�Q GHLQ P �HRRPMOHNMSL �KM R JKN HPSIQ PJQ Hi O�JI _oP x H GJKa RSQQMT MPMN�Q R SKI OSLQNIKMIJ GJQ HRRPMOHNMSLQ �OIMNJQ JL �T ò JONMVJ nH� P R SKI ÷ HO��& _ �HRIJ� M/IJ JQN G �MLOPKIJ QSL RISñIH�� J �T ò JONMVJ nH� P GHLQ KLJ MLNJIôHOJ OSLQNIKMNJ JL �T ò JONMVJ n d PJ OSGJ�T ò JONMVJ nH� P �NHLN HPSIQ HQQSOM� 0 GJQ HONMSLQ KNMPMQHNJKI _ ��I�� J 5SKMPPSL HVHMN GJ OJNNJ � HLM/IJ OSLQNIKMNKL JLVMISLLJ� JLN GJ RISñIH�� HNMSL nH� P�� Mñ�N QSKQ �JaN�NJR S� P �SL RSKVHMN JaRPSIJI PJQ � SGKPJQ QM�RPJQ �Ja�OKNJI GK OSGJ GHLQ PJ 9G@ D8L8D JN JaRPSIJI QSKQ ôSI� J G �HITIJ PJQ VHPJKIQ ÷� _ ySKI OJPH � MP HVHMN I�HPMQ� KLJ� SKPMLJNNJ G �MLNJIôH�HñJ JLNIJ P �ùyo ������ JN nH� P�� Mñ�N �KM G�`LMQQHMN 0 RHINMI GJQ `O� MJIQ G �MLNJIôHOJ '~PJQ G�`LMNMSLQ � ��}¡ü% GJ nH� P�� Mñ�N �KHLG OJPH �NHMN R SQQMT PJ JN PJQ MñLSIHMN QMLSL _ �H GJKaM/� J R SQQMT MPMN�JQN GJ R SINJI QSKQ ÷ HO��& KLJ TMTPMSN�/�KJ ñIHR� M�KJ KNMPMQ�J R SKI �T ò JONMVJ nH� P OS�� J ~}ü�~ �¢£ JN GJ

Page 129: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

msø o�p¯°±� � � ° ÿ�°�� � qp¯¯� ° op±°���

G�`LMI KL OSLQNIKONJKI G �HRRPMOHNMSL QR �OM`�KJ _ nJ NIHVHMP JQN JL OSKIQ GJ `LMNMSL HVJO ­ I�ñSMIJ . JLIx_ �H`ñKIJ r _û � SLNIJ KLJ OHRNKIJ GJ OS�RHIHMQSL GJ NIMQ �¤ _

)*+ , r _û - �SIN unSOSHvnJNNJ HRRPMOHNMSL R JKN �NIJ PHLO�J RHI QM�RPJ OPMO JN R SQQ/GJ QSL � JLK RISRIJ HKa HRRPMOHNMSLQ ÷ HO��& _

yHIOJ �KJ P �MLNJIHONMSL R JKN VJLMI GJ PH ôJL�NIJ GJ ~}ü�~ �¢£ JN GJ PH THIIJ GJQ � JLKQ � P �HRRPMOHNMSL �T ò JONMVJnH� P KLJ ôSMQ OS�RMP�J JL n uVSMI O�HRMNIJ �v JQN PHLO�J GHLQ KL 9A<8¥E u�ü� %¦~}�ü§ RHI PJ G�P�ñK� RIMLOMRHPGJ P �HRRPMOHNMSL v _

+ jfb l+s[¨©¾¤ª ,ƾªZ^]ª[¾Z «Æ¾ªZ^]ª[¾Z YÄ 2s[¨©¾¤ª ,Ó©©È [ª«Ó©©È [ª YÄ 2s[¨©¾¤ª .˪]¤ªª©Ñ_¢_«]ª_ YÄ .[Zª ¨ ][Z ¿[Zª ]¤«£ » £¾Z µª £Ä]¤ q ]¤«¨ ¹¼ ÷ ÐËÓªª¾¤_¢_]µ_ʾ¾¢ q © ¾¾¢ ´© ¾¾¢ - ¹¹ÐËÓªª¾¤_¢_]µ_ʾ¾¢ ]¢¢¾£¼ [Z [ª¼ ´

¹ÐËÓ©© ¢[£]ª[¾Z µÄ]¤_^Ó©© ¢[£]ª[¾Z¼ ´¹ÐËÓ©© µ_ªÑ_¢_«]ª_ / ¹¹Ëª]¤ªª©Ñ_¢_«]ª_ ]¢¢¾£¼ [Z [ª¼¼ ´¹ÐËÓ©© ¤ªZ¼ ´¹© ¾¾¢ ¤_¢_]µ_¼ ´¤_ªª¤Z © ´¸

¬j+ )þ�hcj� l+s[¨© ¾¤ª .Â]¨ ¢ÎĤ_]^ YÄ .s[Z £¢ª^_ ,£]¨ ¢«¨ ¢¨]¢ª_µ YÄ 2s[Z £¢ª^_ ,£]¨ ¢«£]¢¢­]£® YÄ 2¯[¨© ¢_¨ _Zª]ª[¾Z Â]¨ ¢ÎĤ_]^° ¿¨¾[^ äªZ ·ÐËÓªª¾¤_¢_]µ_ʾ¾¢ q © ¾¾¢ ´© ¾¾¢ - ¹¹ÐËÓªª¾¤_¢_]µ_ʾ¾¢ ]¢¢¾£¼ [Z [ª¼ ´ÐËw¾« ¿¯ .ѱ­ªª ^ª ªÄ¤_]^ Â]¨ ¢ .à ´£Ä]¤ q ]¤«¨ ¹©¼ - ´£]¨ ¢ºµª]¤ªª© ¿]¤«¨ à ´ÐËw¾« ¿¯ .Æ[Z ^ª ªÄ¤_]^ Â]¨ ¢ .à ´¹ÐËÓ©© ª_¤¨ [Z]ª_ /Z [¢¼ ´¹© ¾¾¢ ¤_¢_]µ_¼ ´¤_ªª¤Z ´¸_Z^

�H OS�� HLGJ u�OIMNJ JL �T ò JONMVJ nH� Pv GJ ôHTIMOHNMSL G �HRRPMOHNMSLQ Jõ JONKJ OJQ N²O�JQ HKNS� HNM�KJ� JLNJN OSLQNIKMN PJQ GMõ�IJLNQ `O� MJIQ GJ IJQQSKIOJ _ � �HRRPMOHNMSL STNJLKJ R JKN HPSIQ �NIJ GMõKQ�J GJ � HLM/IJHKNSLS� J GJ PH GMQNIMTKNMSL G ��T ò JONMVJ nH� P OJ �KM �NHMN PJ TKN IJO�JIO�� _yHI OSLNIJ OS�� J PJQ GMõ�IJLNQ � JQQHñJQ G �Hi O�HñJ QSLN G�`LMQ GHLQ PJ QSKIOJ GK RISñIH�� J �T ò JONMVJnH� P � QJKPJ PH THIIJ GJ � JLKQ R JKN �NIJ I�ñ MSLHPMQ�J _ oP JQN GSLO L�OJQQHMIJ G �JaNIHMIJ GK RISñIH�� J PK M�� �� J ³Äªª© /««£]¨ ¢ Y[Z¤[] Y¥¤«Ç´]¨©¢_µ«_Z« YĪ¨ ¢

Page 130: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�µ � o�� o� ÿ�°�� ¶ ¯�ÿ� ÿ� ² °�� ÿ� � ° ÿ�°�� ms m

PJQ ML ôSI� HNMSLQ NJaNKJPPJQ QR �OM`�KJQ 0 KLJ PHLñKJ _ nJPH G�RHQQJ PJ OHGIJ GJQ HRRPMOHNMSLQ ÷ HO��& JN LSKQx IJVMJLGISLQ GHLQ PH GJILM/IJ QJONMSL GJ OJ O�HRMNIJ _� �| �� ��� ��� ���� · ����¸ �

�JQ HRRPMOHNMSLQ �T ò JONMVJ nH� P QSLN IHIJ� JLN GMQNIMTK�JQ R SKI ' MLGS( Q _ �L O�JIO�J MOM 0 V�IM`JI PJQôHOMPMN�Q GJ GMQNIMTKNMSL JN PJQ M�RPMOHNMSLQ GJ PH I�ñ MSLHPMQHNMSL Sõ JINJQ RHI _�U� _>¹? <º?@4?» �H `ñKIJ r _ö MPPKQNIJ PJQ R SQQMT MPMN�Q GJ � HLMRKPHNMSL SõJINJQ RHI PJ OSGHñJ B;:>GE8 KNMPMQ� MOMR SKI PJ O� MLSMQ _ ySKI VMQKHPMQJI OJQ OHIHON/IJQ SL KNMPMQJ KLJ VJIQMSL JaR �IM� JLNHPJ GK 9G@ D8L 8D GJ � �nù÷ M� _� �MLNJIôH�HñJ HVJO PJQ TMTPMSN�/�KJQ _�U� KNMPMQJ PH OSKO�J GJ THQ LMVJHK � ��}¡ü% RSKI HRR JPJI KLJ ��N�SGJQNHNM�KJ _

)*+ , r _ö - nS�RHIHMQSL G�R JLGHLNJ GJQ QR �OM`OMN�Q GJ OKPNKIJ _

�H PMQNJ ¢~ü}ü¢��} £ OSLNMJLN PJQ OSGJQ KLMOSGJ GJQ LS�TIJ O� MLSMQ GJ m 0 mø uyi�er

�san

�si

�wu

�liu

�qi

�ba

�jiu

�shi JL yMLx ML �¼ v _ �J RIJ� MJI NIM KNMPMQJ PH ôSLONMSL QNHLGHIG GJ OS�RHIHMQSL GJQ O�H�LJQ u½�} �¡~ '¢¾��ü}�v�KM KNMPMQJ P �SIGIJ GJQ OSGJQ _ �H OPHQQJ ½h £��� '¿%¾�ü%�fü� �¾¡ GJ _�U� ôSKILMN GJQ SKNMPQ �KM IJÀ/NJLN PJQQR �OM`OMN�Q OKPNKIJPPJQ � OJ �KM R JI� JN HPSIQ GJ NIMJI JL IJQR JONHLN P �SIGIJ yMLx ML _

Õ ÖÁ íâìêèãæéâì  áâãä ãìß � ßéèèßãäß åéÃãæéâìUL GJ�SIQ GK OJIOPJ IJQNIJMLN GJQ OSLOJRNJKIQ � KL PHLñHñJ JQN HRRI�OM� RIMLOMRHPJ� JLN RHI QJQ HRRPMOHNMSLQG�VJPSRR �JQ _ �H ôHOMPMN� G �MLQNHPPHNMSL JN PJ OSL ôSIN G �KNMPMQHNMSL GJ OJPPJQ�OM ôSLN RHINMJ GJQ OIMN/IJQ M�R SINHLNQR SKI OJNNJ HRRI�OMHNMSL _ �SKQ HVSLQ � SLNI� GHLQ OJ O�HRMNIJ PJQ T JQSMLQ GJ R SINHTMPMN� JN GJ QR �OM`OMN�

GHLQ P �MLN�ñIHNMSL GJQ HRRPMOHNMSLQ NHLN HK LMVJHK GK Qx QN/� J G �JaRPSMNHNMSL �KJ GK Qx QN/� J GJ ñJQNMSL GJôJL�NIJ HQQS OM� _ � JQ JaR �IM� JLNHNMSLQ RI�QJLN�JQ QSLN GMIJONJ� JLN MQQKJQ GJQ NIHVHKa QKI P �MLNJISR �IHTMPMN�G�VJPSRR �Q HK O�HRMNIJ � _ U PPJQ SLN R JI� MQ GJ � SLNIJI P �M�RSINHLOJ GJ P �MLNJIôHOJ ñIHR� M�KJ R SKI PH GMõKQMSLG �HRRPMOHNMSLQ NHLN R SKI ôHOMPMNJI P �KNMPMQHNMSL GJQ RISñIH�� JQ �KJ OS�� J ôIJML 0 PJKI R SINHñJ _� �JaJ�RPJ GJ PH VMQMSLLJKQJ ��� � KNMPMQHLN P �ù'� GJ �HVH L:¥ # Ä$ü¢ü}Å JN QM�KPHLN ~}ü�~ �¢£ H R JI� MQ GJOSLQNIKMIJ KLJ HRRPMOHNMSL R SINHTPJ x OS�RIMQ QKI ÷ HO��& S� ~}ü�~ �¢£ L �JQN RHQ R SIN�J _ � �J�THI�KJ� JLN ÆÇj ehjb�khf�ef(b (È kfc ))c �� É jb�jhfb l

Page 131: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

mss o�p¯°±� � � ° Ê�°�� � qp¯¯� ° op±°���

GK 9G@ D8L8D GHLQ GJQ LHVMñHNJKIQ 'JT KNMPMQJ PJ ��OHLMQ� J GJ @ DB? :; R SKI �NJLGIJ PJQ ôSLONMSLLHPMN�Q G �KLJHRRPMOHNMSL Ja MQNHLNJ _ �H OSLQNIKONMSL G �HRRPMOHNMSLQ ñIHR� M�KJQ HKNSLS� JQ R SKI ÷ HO��& SK P �JLOHRQKPHNMSLG �~���ü OS�� J HRRPMOHNMSL HKNSLS� J _�U� R JI� JNNJLN KLJ GMõKQMSL RPKQ PHIñJ _�L STNMJLN HPSIQ QSMN GJQ HRRPMOHNMSLQ R SINHTPJQ KNMPMQHLN ~}ü�~ �¢£ � QSMN GJQ HRRPMOHNMSLQ J�THI�K�JQ HVJO

KL Ë ÌÍ RHINMOKPMJI utSI� Q � ù'� � ùRR" MNv _ nS�� J ~}ü�~ �¢£ JQN � HMLNJLHLN NISR PM� MN�J � PH �KJQNMSL QJ R SQJG �KNMPMQJI R SKI nù÷� KLJ V�IMNHTPJ Ë ÌÍ _ �SMN�SL HPSIQ JL OSLQNIKMIJ KLJ LSKVJPPJ 0 RHINMI GJ TMTPMSN�/�KJQR SINHTPJQ u¦Î � ¿�Î � Ï Ð �¡§¾Ï £ � ___v SK 0 RHINMI GJ OJPPJQ G �KL PHLñHñJ SK G �KL JLVMISLLJ� JLN R SINHTPJ u�HVH �_�U�v� JL PJQ MLN�ñIHLN JN RISTHTPJ� JLN JL PJQ �RKIHLN Ñ �K TMJL KNMPMQJI GJQ Ë ÌÍ Ja MQNHLNJQ GHLQ G �HKNIJQPHLñHñJQ JL QR �OM` HLN PJQ MLNJIHONMSLQ R SQQMT PJQ JLNIJ OJPPJQ�OM JN PH RHINMJ OHPOKPHNSMIJ G �KL RISñIH�� J 0 PH� HLM/IJ GK � SG/PJ ÷5n Ñ �H I�R SLQJ L �JQN RHQ M���GMHNJ JN G�R JLG GJQ SKNMPQ GJ OSLQNIKONMSL G �MLNJIôHOJ _oP JQN 0 LSNJI �KJ P �JaRIJQQMSL GHLQ KL PHLñHñJ GJ RISñIH�� HNMSL G �KLJ MLNJIôHOJ KNMPMQHNJKI JQN NI/Q VJIT JKQJJN OSLNMJLN GK OSGJ PSKIG 0 ñ�IJI � HLKJPPJ� JLN _ nJPKM�OM R SPPKJ JL ñ�L�IHP PH PMQMT MPMN� G �KL RISñIH�� J G �S�P �MLN�I�N G �KLJ T SLLJ Q�RHIHNMSL _

nJNNJ L�OJQQHMIJ Q�RHIHNMSL QJ IJNISKVJ R SKI PH I�ñ MSLHPMQHNMSL GJQ HRRPMOHNMSLQ _ �M PH I�ñ MSLHPMQHNMSL Q �Jô�ôJONKJ KLM�KJ� JLN HK LMVJHK GJ P �MLNJIôHOJ KNMPMQHNJKI � SL IJNS�T J QKI PJQ �KJQNMSLQ RI�O�GJLNJQ JN QKI PJQT JQSMLQ G �SKNMPQ R SKI QH ñJQNMSL _ �H R SQQMT MPMN� G ��NJLGIJ KLJ HRRPMOHNMSL 0 KLJ PHLñKJ GSLL�J GSMN R SKVSMIQ �Jõ JONKJI QHLQ IJOS�RMPHNMSL GJ PH GMNJ HRRPMOHNMSL _ � �HL� SMLQ OJNNJ ML ôSI� HNMSL GSMN �NIJ I�R JIOKN�J HKQJML � �� J GJ P �HRRPMOHNMSL LSL QJKPJ� JLN R SKI PJQ GMHPSñKJQ HVJO P �KNMPMQHNJKI � HMQ HKQQM GHLQ PJ OHPOKP QMT JQSML JQN _ùKNHLN PJ � SG/PJ ôSLONMSLLJP NxR � JQN HRRISRIM� RSKI PH OSLQNIKONMSL G �MLNJIôHOJ uOS�RSQMNMSL GJ OS��R SQHLNQ JN NIHMNJ� JLN G ��V�LJ� JLNQ RHI ôSLONMSLQ I�ÀJaJQv HKNHLN MP LJ QJ RI�NJ ñK/IJ 0 P �JaNJLQMT MPMN� GJQOS�R SQHLNQ _ �J � SG/PJ ST ò JN GJ RHI QH PMHMQSL IJNHIG�J R JKN I�R SLGIJ 0 OJ T JQSML _ ÷ HMQ OJ L �JQN RHQ ôSIO�� JLNPJ QJKP � SG/PJ _ � �MLNJIôHOJ G �KLJ HRRPMOHNMSL R JKN HKQQM �NIJ G�OIMNJ GHLQ KL PHLñHñJ GJ GJQOIMRNMSL JaNJILJ0 PH � HLM/IJ G ��o÷��Ò _ � MJL QSKVJLN O �JQN P �SKNMP GJ G�VJPSRR J� JLN �KM IJLG PH OSLQNIKONMSL GJ P �MLNJIôHOJRIHNMOHTPJ _� �MLQNHPPHNMSL G �KLJ HRRPMOHNMSL �T ò JONMVJ nH� P R SKI ' MLGS( Q SK ÷ H��& JQN ôHOMPMN�J IJQR JONMVJ� JLNRHI PH RISGKONMSL G �HRRPMOHNMSLQ _�U� GJ � �nù÷ M� JN RHI P �JLOHRQKPHNMSL JL �T ò JONMVJ n G �KLJ HRRPMOHNMSL�T ò JONMVJ nH� P _ �JKIQ � MQJQ 0 òSKI QSLN PM�JQ HKa TMTPMSN�/�KJQ GxLH� M�KJQ _ � HLQ PJ OHQ GJ _�U� PH ñJQNMSLGJ VJIQMSL HKNSIMQJ PH OS�HTMNHNMSL GJ GMõ�IJLNJQ VJIQMSLQ G �KLJ � �� J TMTPMSN�/�KJ _ � �JaR �IM� JLNHNMSL GK@ DB? :; R SKI LHVMñHNJKI 'JT � SLNIJ KLJ NISMQM/� J VSMJ GJ GMõKQMSL RHI P �JLVSM GK QSKIOJ �KM JQN IJOS�RMP� 0PH VSP�J _ nJQ QSKIOJQ R JKVJLN �NIJ OIxRN�JQ QM T JQSML JQN _

 Ó*** l� f+ ) l(hÔÕfb�c� l���

Page 132: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

Ö×ØÙÚÛÜÝ×Ø

�L � JQKIJ HMQ�� JLN PJQ R��LS�/LJQ GJ � SGJ GHLQ P �MLGKQNIMJ ML ôSI� HNM�KJ RHI PJQ QNHñJQ MLGKQNIMJPQ RIS�R SQ�Q 0 LSQ �NKGMHLNQ _ ùRI/Q PJQ T JQSMLQ GJ OSLOJRNMSL JN GJ R SINHñJ G �HRRPMOHNMSL QSKQ MLNJIôHOJ ñIHR� M�KJJQN VJLKJ PH VHñKJ GJ PH RISñIH�� HNMSL ST ò JN �KM H RIMQ QSL JQQSI HK � S� JLN GJ P �HRRHIMNMSL GJ �HVH RIS�� SKVHLN PH RISñIH�� HNMSL OPMJLN�QJIVJKI VMH PJQ LHVMñHNJKIQ (JT _ �L HNNJMLN � HMLNJLHLN PH RISñIH�� HNMSLRHI OS�R SQHLNQ NSKN JL Hò SKNHLN GJQ OSKO�JQ GJ RISNS OSPJQ JN GJ � HLMRKPHNMSLQ GJQ GSLL�JQ QSKQ ôSI� HN QJVSKPHLN KLMVJIQJP 0 PH � HLM/IJ GJ &÷� � QHLQ SKTPMJI PH I�RHINMNMSL RHI PJQ ó8N F8<L:>8F _

�L R JKN QJ GJ� HLGJI HVJO IHMQSL S� JQN PH RPHOJ GJQ PHLñHñJQ ôSLONMSLLJPQ QNHNM�KJ� JLN NxR �Q GHLQ OJQLSKVJHKN�Q IJLSKVJP�JQ O�H�KJ HLL�J _ UN R SKINHLN OJ O�N� LSVHNJKI RIMLOMRHPJ� JLN R SKQQ� RHI PJ � HI�JNMLñIJRIJLG TMJL QSKVJLN GJQ QSPKNMSLQ HLOMJLLJQ _ oP Q ��OSKPJ JLVMISL NIJLNJ HLQ JLNIJ PJ RIJ� MJI PHLñHñJ 0 ST ò JNQu�o÷��ù v JN P �HIIMV�J � HQQMVJ GJ �HVH _ �H RI�QJLNHNMSL GK PHLñHñJ �HVH RHI n�IMQNMHL wKJMLLJO 6�L OSO�NHMPMLLSVHLN GJ QSPKNMSLQ �OKP�JQW G�OIMN T MJL PH QMNKHNMSL _

ùK GJP0 GK PHLñHñJ ÷� �KJPPJQ QSLN PJQ MLÀKJLOJQ �KJ PH RISñIH�� HNMSL ôSLONMSLLJPPJ NxR �J R JKN HRR SINJIHKa �VSPKNMSLQ GJ PH QOMJLOJ uSK NJO�LSPSñ MJv ML ôSI� HNM�KJ Ñ ySKI x I�R SLGIJ LSKQ RI�OMQSLQ NSKN G �HT SIGLSNIJ I�RSLQJ HKa OIMNM�KJQ RI�QJLN�JQ GHLQ P �MLNISGKONMSL R SKI G�NHMPPJI JLQKMNJ P �M�R SINHLOJ GK NxRHñJQNHNM�KJ R SKI OJNNJ ôH� MPPJ GJ PHLñHñJQ JN �KJPQ QSLN QJQ �P�� JLNQ JQQJLNMJPQ _ �SKQ JQQHxSLQ JLQKMNJ GJ G�ñHñJI�KJPPJ QSINJ GJ OS�HTMNHNMSL R JKN �NIJ JLIMO� MQQHLNJ JLNIJ PJQ G�ôJIPHLNJQ �HVH �nÞ �5� _�U� JN PJQ PHLñHñJQôSLONMSLLJPQ QNHNM�KJ� JLN NxR �Q _ nJ QSLN OJQ I�RSLQJQ �KM SIMJLNJLN LSQ NIHVHKa ôKNKIQ _

ß ����� � �} �� � ��� ��H RI�QJLNHNMSL GJ OJ NIHVHMP VSKPHMN I�R SLGIJ HKa OIMNM�KJQ HLOMJLLJQ JN I�OJLNJQ QKI PJQ PHLñHñJQôSLONMSLLJPQ _ U PPJ � SLNIHMN GJ RHI PH GMVJIQMN� GJQ N�/� JQ HT SIG�Q PH VMNHPMN� GJ PH IJO�JIO�J QKI PJQ PHLñHñJQ _

nJPPJ�OM L �JQN RHQ OPSMQSLL�J R SKI KL NxR J GJ PHLñHñJ OHI PJQ NIHVHKa QKI PJQ GMõ�IJLNJQ ôH� MPPJQ GJ PHLñHñJQQ �MLÀKJLOJLN _�JQ OS�RMPHNJKIQ nJ÷� JN � �nù÷ M� SLN � SLNI� �KJ P �SL RSKVHMN OSLQNIKMIJ GK OSGJ R SINHTPJ _ �HLQ PJQHLL�JQ öø � n QJ�TPHMN HVSMI HNNJMLN PJ QNHNKN G �HQQQJ�TPJKI R SINHTPJ _ n �JQN GHLQ OJN JQRIMN �KJ nJ÷� HVHMN

�N� OSL�K JN MP H HMLQM RIS`N� GJQ H��PMSIHNMSLQ I�HPMQ�JQ R SKI PJQ OS�RMPHNJKIQ n GKIHLN PH G�OJLLMJ _ oP� SLNIJ HMLQM �KJ R SINHTMPMN� JN Ji OHOMN� R JKVJLN ôHMIJ T SL ��LHñJ _ �J IJNSKI GJQ � HO� MLJQ VMINKJPPJQ u�5÷ �_�U�v IJ� JN JL OHKQJ JL RHINMJ OJ QNHNKN _ nJINJQ OJQ � HO� MLJQ QSLN OSL�KJQ R SKI ôHOMPMNJI PH OS�RMPHNMSL GJQPHLñHñJQ 0 ST ò JNQ � HMQ JPPJQ SK PJKIQ QKOOJQQJKIQ R JKVJLN GJVJLMI PJ OIJKQJN G �HRRPMOHNMSLQ �KPNM�PHLñHñJQ _�L � SLNIJ HVJO � �nù÷ M� �KJ PJQ PHLñHñJQ ôSLONMSLLJPQ R JKVJLN ôHMIJ RHINMJ GJ P �Sõ IJ 6QNHLGHIGW RSKI PJRISñIH�� JKI _ �L � HIMJ MOM PJQ R SQQMT MPMN�Q Sõ JINJQ RHI PH R SINHTMPMN� JN P �MLNJISR �IHTMPMN� _ nJINJQ P �Ji OHOMN�GJ � �nù÷ M� L �JQN RHQ JLOSIJ HK IJLGJà�VSKQ R SKI PJQ RISñIH�� JQ NI/Q ôSLONMSLLJPQ � � HMQ SKNIJ PJ ôHMN�K �MP JQN JLOSIJ ò JKLJ � PH OS�RMPHNMSL VJIQ GJQ � HO� MLJQ VMINKJPPJQ NxR �JQ R SKI PHLñHñJQ 0 ST ò JN L�OJQQMNJGJ IJOSLQMG�IJI OJINHMLJQ �HTMNKGJQ GJ PH OS�RMPHNMSL GJQ PHLñHñJQ ôSLONMSLLJPQ QNHNM�KJ� JLN NxR �Q � JLRHINMOKPMJI QKI PH OSLQJIVHNMSL GJ P �ML ôSI� HNMSL GJ NxRHñJ NSKN HK PSLñ GK RISOJQQKQ GJ OS�RMPHNMSL _

�JQ NIHVHKa QKI P �MLNJISR �IHTMPMN� SLN ñIHLGJ� JLN HVHLO� QKI OJQ GMa GJILM/IJQ HLL�JQ _ �SKQ HVSLQ � SLNI�ms�

Page 133: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

msn o�p¯°±� � � ° Ê�°�� � qp¯¯� ° op±°���

�K �KLJ HRRPMOHNMSL R SKVHMN �NIJ �OIMNJ GHLQ RPKQMJKIQ PHLñHñJQ OS�� J RHI JaJ�RPJ ��� � JL �T ò JONMVJ nH� PJN �HVH RHQQHLN RHI n _ �H NJLGHLOJ H� SIO�J HVJO �HVH JN IJRIMQJ RHI _�U� LSKQ QJ�TPJ JL N��SIMJ SKVJINJHKa PHLñHñJQ ôSLONMSLLJPQ NxR �Q _

�JQ HRRPMOHNMSLQ I�HPMQ�JQ JL �T ò JONMVJ nH� P GJVMJLLJLN GJ RPKQ JL RPKQ OS�RPJaJQ JN KNMPMQJLN GJQTMTPMSN�/�KJQ QR �OM`�KJQ SK GJQ OS�� HLGJQ JaNJILJQ _ �SKQ LSKQ QS�� JQ HR JI�KQ HK � S� JLN GJ NJQNJI� �nù÷ M� JL OS�RMPHLN PJQ HRRPMOHNMSLQ R�HIJQ G ��T ò JONMVJ nH� P �K �JPPJQ IJR SQHMJLN QKI GJQ OS�RSQHLNQJaNJILJQ y1¡ �£¾¡ HVJO ¦Î � 9A<8¥EF JN RIM� MNMVJQ I�QJHK � �%�� � RHI P �MLQNHPPHNMSL GJ OJINHMLQ SKNMPQ GJ ���U& �� ¢� ���z�� � IJR SQHMN QKI GJQ ��OHLMQ� JQ GJ THQJ GJ &�' MLGS( R SKI P �HLM� HNMSL GJQ RI�QJLNHNMSLQ _ �JKPPJ OS�RMPHNJKI JN OJINHMLQ HQQMQNHLNQ GJ RIJKVJQ �NHMJLN GMIJONJ� JLN R SINHTPJQ JL � �nù÷ M� _ n �JQN KLR��LS�/LJ OS�RI��JLQMT PJ RHIOJ �KJ PJQ HRRPMOHNMSLQ HONKJPPJQ � PM�JQ HK �KPNM��GMH JõJONKJLN GJQ N²O�JQ GJRPKQ JL RPKQ OS�RPJaJQ _ �L NIHVHMP GJ G�`LMNMSL GJ OJINHMLJQ TMTPMSN�/�KJQ � RIMLOMRHPJ� JLN R SKI P �MLNJIôHOJñIHR� M�KJ JQN L�OJQQHMIJ HKòSKIG ��KM _ �H R�HQJ G �JaR �IM� JLNHNMSL HxHLN JK PMJK _

� �JLQJMñLJ� JLN GJQ PHLñHñJQ ôSLONMSLLJPQ IJQNJ M�RSINHLN GHLQ PJ � MPMJK HOHG�� M�KJ ôIHL�HMQ GHLQ PJQGMõ�IJLNQ OxOPJQ KLMVJIQMNHMIJQ JN PJQ OPHQQJQ RI�RHIHNSMIJQ _ UN O �JQN KLJ T SLLJ O�SQJ _ nJINJQ SL R JKN JLNJLGIJKL OJINHML LS�TIJ GJ OIMNM�KJQ QKI PH GMi OKPN� G �HRRIJLNMQQHñJ GJ OJQ PHLñHñJQ � � HMQ MLNIMLQ/�KJ� JLN PJ� SG/PJ ôSLONMSLLJP JQN RPKQ QM�RPJ �KJ PJ � SG/PJ ST ò JN � G �S� R JKN��NIJ KLJ L�OJQQMN� G �HGHRNHNMSL GJQ OSKIQOS�� J MLGM�K� 0 PH OSLOPKQMSL GK O�HRMNIJ ³ _ �L OSKIQ GJ RISñIH�� HNMSL L �H RHQ 0 OS�� JLOJI RHI KL OSKIQGJ PSñ M�KJ � � �� J QM OJPK M�OM R JKN HMGJI 0 PH ôSI� HPMQHNMSL _ oP Ja MQNJ GJ LS�TIJKa R SPxOSRM�Q HGSRNHLN OJNNJG�� HIO�J RPKQ RIHñ� HNM�KJ _ oP � HL�KJ R SKI �T ò JONMVJ nH� P KL JLVMISLLJ� JLN QM�RPJ GJ RIMQJ JL � HML 0 PH� HLM/IJ GJ �I�O�J� J �# _ oP ôHKN LSNJI �KJ P �JLQJMñLJ� JLN GJQ PHLñHñJQ ôSLONMSLLJPQ JQN KL ñIHLG RPHMQMI R SKIP �JLQJMñLHLN �KJ ò J QKMQ JN R SKI PJQ �NKGMHLNQ �KHLG MPQ SLN ôIHLO� M PH RIJ� M/IJ � HIO�J GJ PH OS�RI��JLQMSLGK � SG/PJ _

�J O�HRMNIJ n H � SLNI� GJKa RMQNJQ R SKI PH OSLQNIKONMSL GJ V�IMNHTPJQ JLVMISLLJ� JLNQ GJ G�VJPSRR J� JLNuMLN�ñI�Q SK LSL v _ n �JQN JLOSIJ HONKJPPJ� JLN KL GJQ R SMLNQ ôHMTPJQ _ � �JaR �IMJLOJ GJ �ü�%b� � �NHMN 0 P ��RS�KJKLJ HVHLO�J IJ� HI�KHTPJ _ �L R JKN LSNJI �K �KLJ T SLLJ MLNJISR �IHTMPMN� HVJO GJQ SKNMPQ Ja MQNHLNQ R JKN HMGJI0 PJKIQ I�HPMQHNMSLQ _ � �HL� SMLQ PH VMQMSL OPHQQM�KJ GK NxRHñJ OS�� J QáIJN� GJ ôSLONMSLLJ� JLN GSMN �NIJSKVJINJ R SKI �KJ P �ML ôSI� HNMSL GJ NxR JQ OSLNMLKJ G �Ja MQNJI 0 P �Ja�OKNMSL SK 0 PH � MQJ HK R SMLN _ nJQ NIHVHKaLJ QSLN RHQ ôSINJ� JLN RIS�KQ OS�� J OHGIJ GJ IJO�JIO�J _ n �JQN KL NSIN _

�H QNHLGHIGMQHNMSL GJQ PHLñHñJQ ôSLONMSLLJPQ H OSLLK RIMLOMRHPJ� JLN KLJ VIHMJ LSI� J R SKI �O�J� J JN KLJôSI� HPMQHNMSL R SKI �NHLGHIG ÷� _ � �HL� SMLQ SL H VK QKIñ MI R SKI OJQ GJKa PHLñHñJQ GJQ VHIMHLNJQ OS�� J­KMPJ R SKI �O�J� J SK �÷� _�U� RSKI �÷� �KM MLNISGKMQHMJLN GJ LSKVJHKa NIHMNQ _ �T ò JONMVJ nH� P JQNIJQN� PHT SIHNSMIJ JaR �IM� JLNHP JL �VSPKHLN HK ` P GJQ HLQ � HMQ JL JQQHxHLN GJ OSLQJIVJI PH OS�RHNMT MPMN�HQOJLGHLNJ _ nJPH H ôSLONMSLL� GHLQ PH � JQKIJ S� MP x HVHMN KLJ QSKIOJ RIMLOMRHPJ uPJ ñISKR J nIMQNHP GJ P �oLIMHvGJ G�OMQMSL GHLQ QSL �VSPKNMSL _ � �HL� SMLQ OJPH H RK ôIJMLJI QSL HGSRNMSL GHLQ PJ � MPMJK MLGKQNIMJP _ �L R JKNLSNJI �K �KL PHLñHñJ OS�� J �HVH �VSPKJ HKQQM GJ � HLM/IJ GMIJONMVJ GJ PH RHIN GJ ��� _ � �HL� SMLQ SL R JKNM� Hñ MLJI �K �KL PHLñHñJ H T JQSML GJ R SMLNQ GJ QNHTMPMN� 0 PH � HLM/IJ G �ùGH uù�ùû� JN ù�ùö³v � �KMNNJ 0JL GMVJIñJI JLNIJ GJKa R �IMSGJQ _ �J NSKNJ � HLM/IJ MP Ja MQNJ KLJ OJINHMLJ HLHIO� MJ JN KL QNHLGHIG L �JQN RHQôSIO�� JLN ñHñJ GJ R �IJLLMN� _ � ��NHTPMQQJ� JLN GJ OSLQSINMK� �4 R JKN R JI� JNNIJ KLJ �VSPKNMSL OSLOJIN�J _

�H GMQR SLMTMPMN� GJQ OS�RMPHNJKIQ GJQ PHLñHñJQ ôSLONMSLLJPQ Q �JQN ñIHLGJ� JLN H��PMSI�J _ �L JaJ�RPJJQN PJ OS�RMPHNJKI JaR �IM� JLNHP � Mñ PS S R SKI _�U� �KM Q �MLQNHPPJ HMQ�� JLN QSKQ ' MLGS( Q _ � �JLQJ�TPJ GJQGMQNIMTKNMSLQ JaMQNJ JL ôSI� HN TMLHMIJ R SKI PJQ RIMLOMRHKa QxQN/� JQ _ �J R SMLN 0 H��PMSIJI OSLOJILJ PH GMõKQMSLG �HRRPMOHNMSLQ JN PJKIQ � MQJQ 0 ò SKI _ XÔÔÔ Y ¤µ£Ä_¨ _ Y¾¤« ` £]¨ ¢ Y[Z¤[] Y¥¤«£¾Z µ¾¤ª[ª¨ «[Z^_´ °¥¤ YµÄª¨ ¢

Page 134: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�µ � o�� o� Ê�°�� ¶ ¯�Ê� Ê� ² °�� Ê� � ° Ê�°�� ms³

nS�� J MLGM�K� GHLQ P �MLNISGKONMSL � PH QHñH GJ PH OS�� JIOMHPMQHNMSL G �JLVMISLLJ� JLNQ R SKI PH RISñIH��� HNMSL ôSLONMSLLJPPJ LJ ôSIOJ RHQ P �SRNM� MQ� J _ ÷ �� J JL �KMNNHLN PH OS��KLHKN� GJQ G�VJPSRR JKIQ OS�� JH ôHMN PH QS OM�N� nIxS�LJN(SI�Q JL RIS� SKVHLN KL PHLñHñJ ôSLONMSLLJP R SKI PJQ HRRPMOHNMSLQ GJ OS��KLHKN�VMINKJPPJ H QKTMN GJ RPJML ôSKJN P �JõSLGIJ� JLN GJ PH TKPPJ oLNJILJN _ �J ôHMN �KJ PH � Hò SIMN� GJQ M�RPHLNHNMSLQGJ PHLñHñJQ ôSLONMSLLJPQ QSMN JL 6SR JL QSKIOJW L �JQN RHQ ôSIO�� JLN KL ôIJML 0 PH OSLQNMNKNMSL G �KL � HIO�� _� �JaJ�RPJ GJ PH QS OM�N� ùn� �� � SLNIJ �KJ PJ � SG/PJ JQN VMHTPJ Q �MP Ja MQNJ KLJ THQJ G �HRRPMOHNMSLQ QKi QHLNJ _nJ NxR J GJ T JQSML R SKI GJQ PHLñHñJQ OS�� J �T ò JONMVJ nH� P SK . HQ�JPP R SKIIH QKIVJLMI RHI PH GMõKQMSLG �HRRPMOHNMSLQ 6R�HIJQW � SNMVHLN PJKI J�RPSM _ nJ GMQOSKIQ R SKVHMN G�ò 0 �NIJ NJLK MP x H �KJP�KJQ HLL�JQ � � HMQMP QJ�TPJ �K �MP IJQNJ VHPHTPJ _58 7 9?^]4¹>â@<8 5= >ã]âä8 ùK PSLñ GJQ GMõ�IJLNQ O�HRMNIJQ GJ OJ GSOK� JLN LSKQ HVSLQ IJLOSLNI� GJQRISTP�� HNM�KJQ PM�JQ HK R SPx� SIR� MQ� J RHIH��NIM�KJ �KM GSLLJ KL OJINHML LMVJHK G ��S� Sñ�L�MN� 0 ÷� _

- <ºâ] ?>¹8 å y �H OS�RMPHNMSL G �KL PHLñHñJ QNHNM�KJ� JLN NxR � QJ GSMN GJ OSLQJIVJI NSKNJ P �ML ôSI� HNMSLGJ NxR JQ uV�IM` �J SK ML ô�I�Jv GKIHLN PH O�H�LJ GJ NIHLQôSI� HNMSL GK NJaNJ GK RISñIH�� J _ nJPH GJVMJLN� �� J OIKOMHP �KHLG PH OMT PJ GK OS�RMPHNJKI JQN KL HQQJ�TPJKI NxR � _- <ºâ] ?>¹8 æ y �JQ SKNMPQ G �JaNJLQMSLQ QxLNHa M�KJQ ñHñLJIHMJLN 0 � HLMRKPJI PJ QxQN/� J GJ NxR JQ _- <ºâ] ?>¹8 ç y � �MLNJISR �IHTMPMN� JLNIJ PHLñHñJQ L�OJQQMNJ PJ RHQQHñJ G �KL QxQN/� J GJ NxR JQ 0 KL HKNIJ�KMNNJ 0 Jõ JONKJI OJNNJ RHQQJIJPPJ GHLQ P �MLNJIQJONMSL GJQ Qx QN/� JQ GJ NxR JQ _- <ºâ] ?>¹8 è y �L JLVMISLLJ� JLN GJ G�VJPSRR J� JLN H T JQSML GJ OS��KLM�KJI HK OSLOJRNJKI G �HRRPMOHNMSL

P �ML ôSI� HNMSL GJ NxR JQ _ nJPH NHLN HK LMVJHK GJ P ��OIMNKIJ GJQ MLNJIôHOJQ JN GK RISñIH�� JQ �KJ R SKI PHNIHOJ JN PH � MQJ HK R SMLN GJ RISñIH�� JQ _- <ºâ] ?>¹8 é y �L PHLñHñJ NxR � QNHNM�KJ� JLN SIMJLNJ PH R JLQ�J GJ P ��NKGMHLN _ �L RHQQJ GK 6RISñIH� `IQN �N� ML� PHNJIW 0 6NxR J `IQN � N� ML� PHNJIW_ �HLQ �NIJ HTQSPK� JLN I�VSPKNMSLLHMIJ � O �JQN G�ò 0 KL RISñI/Q _- <ºâ] ?>¹8 ê y �J NxRHñJ QNHNM�KJ R JKN �NIJ JL RHINMJ V�IM`� � GJ � HLM/IJ GxLH� M�KJ � R JLGHLN PH R�HQJG ��PHT SIHNMSL HK O�HIñJ� JLN G �KLJ HRRPMOHNMSL _ �H QáIJN� GK R SMLN GJ VKJ NxRHñJ GK N�P�O�HIñJ� JLNG �HRRPMOHNMSLQ R JKN �NIJ QM�RPM` � RHI PH IJOS�RMPHNMSL GJ QSKIOJQ _

� ��� �� � �ë?@ì;¹8@<8 8> \;¹?í<â>?4@ 58 >ã]8» �J NxRHñJ QNHNM�KJ JQN P ��P�� JLN JQQJLNMJP GK PHLñHñJ ÷� _ oP ñHIHLNMN�KJ PJQ JIIJKIQ GJ NxRHñJ G�NJON�JQ G/Q PH OS�RMPHNMSL LJ QKIVMJLGISLN RHQ 0 P �Ja�OKNMSL _ ÷ �� J QM KL ��OH�LMQ� J OS�� J PJQ JaOJRNMSLQ IJQNJ L�OJQQHMIJ GHLQ PH � JQKIJ S� KLJ GMVMQMSL RHI à�IS GJVIH IS�RIJ PJ OHPOKPJL OSKIQ �KM L �HT SKNMN RHQ _ ULPJVJI 0 ÷� QSL NxRHñJ QNHNM�KJ O �JQN IJVJLMI GHLQ PJ � SLGJ � MQR uJaOJPPJLNPHT SIHNSMIJ PMT JINHMIJ HK GJ� JKIHLNv _ �JQ PHLñHñJQ NxR � GxLH� M�KJ� JLN OSLQMG/IJLN KLJ JIIJKI GJ NxRHñJOS�� J R SKVHLN QKIVJLMI JN PH NIHMNJLN RHI GJQ JaOJRNMSLQ _

�KRR SQJI �KJ P �JLQJ�TPJ G �KL RISñIH�� J H RHQQ� P ��RIJKVJ GJ P �HPñSIMN�� J GJ NxRHñJ GJ ÷� � O �JQN QJPM� MNJI 0 KL � SLGJ OJINJQ IMO�J � HMQ HQQJà MQSP� _ nJPH QKIVMJLN x OS�RIMQ JLNIJ RISñIH�� JQ MQQKQ GK � �� JPHLñHñJ G�QMIHLN OS��KLM�KJI GJQ VHPJKIQ OS�RPJaJQ _ nJPH PM� MNJ ôSINJ� JLN P �MLNJISR �IHTMPMN� JLNIJ PHLñHñJQ _� �MG�J HPSIQ JQN G �SKVIMI PJ OHIOHL GK NxRHñJ QNHNM�KJ RHI KL NxRHñJ GxLH� M�KJ GHLQ PJQ OHQ S� PJQ VHPJKIQSK PJQ RISñIH�� JQ QSLN JaN�IMJKIQ _ ySKI IJQNJI GHLQ P �JQRIMN ÷� � OJ NxRHñJ GxLH� M�KJ GSMN IJQNJI JaRPMOMNJ _÷ HMQ MP x H KL R SMLN �KM JQN QSKVJLN R SP�� M�KJ GHLQ PJ NxRHñJ QNHNM�KJ 0 PH ÷� _ oP JQN NI/Q QSKVJLN OSL ôSLGKHVJO P �ML ô�IJLOJ GJ NxR JQ _ � I OJ �KM JQN M�RSINHLN O �JQN PH V�IM`OHNMSL QNHNM�KJ GJQ NxR JQ G �KL RISñIH�� J _nJKa �OM R JKVJLN TMJL QáI �NIJ ôSKILMQ RHI PJ RISñIH�� JKI _ ÷ �� J QM P �HPñSIMN�� J GJ V�IM`OHNMSL IJQQJ�TPJ GHLQPJ OHQ GK R SPx� SIR� MQ� J RHIH��NIM�KJ 0 P �HPñSIMN�� J G �ML ô�IJLOJ _ oP L �JQN RHQ O�S�KHLN R SKI KL RISñIH�� JKIùGH G �MLGM�KJI PJQ NxR JQ GJ RHIH�/NIJQ G �KLJ ôSLONMSL SK PJQ NxR JQ G �KL � SGKPJ ñ�L�IM�KJ _oP ôHKN HPSIQ OSLQMG�IJI P �ML ô�IJLOJ GJ NxR J OS�� J KL OSL ôSIN _ ÷ HMQ OJ OSL ôSIN R JKN �NIJ NIS�R JKI R SKI PJG�TKNHLN JN � �� J PJ RISñIH�� JKI OSL`I�� _ oP L �JQN RHQ IHIJ GJ VSMI RPHLO�JI KL �NKGMHLN QKI KLJ JIIJKI GJ �î�j ¬(hc þck�b()(Ô fc� ï ÔÔÔ Y«Z]ª Y£¾¨

Page 135: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

msr o�p¯°±� � � ° Ê�°�� � qp¯¯� ° op±°���

NxRHñJ ML ô�I�J RHI PJ OS�RMPHNJKI _ � J RPKQ PJ ôHMN GJ LJ RHQ 0 HVSMI 0 �OIMIJ PJQ NxR JQ MLÀKJLOJ PJ Qx QN/� J GJNxR JQ GK PHLñHñJ PK M�� �� J _ �H QxLNHaJ GJQ NxR JQ R JKN HPSIQ GJVJLMI OS�RPJaJ � QJKPJQ PJQ G�`LMNMSLQ GJ NxR JQQJISLN 0 PH O�HIñJ GK RISñIH�� JKI _í 7>¹âä8 58 ^4>?ì» �H G�`LMNMSL G �KLJ ôSLONMSL RHI OHQ QKI KL NxR J QS�� J JQN NSKò SKIQ �P�ñHLN JN G �KLJñIHLGJ OPHIN� _ � J RPKQ PJQ HVJINMQQJ� JLNQ GK `PNIHñJ �KJ R JKN RISGMñKJI KL OS�RMPHNJKI GSLLJ KLJ ML ôSI� HNMSLôHOMPJ� JLN OS�RI��JLQMT PJ RHI PJ RISñIH�� JKI _â]]7?<â>?4@ ]â¹>?8 778 � �HRRPMOHNMSL RHINMJPPJ G �KLJ ôSLONMSL 0 KLJ RHINMJ GJ QJQ HIñK� JLNQ R JI� JN GJ LJRHQ QJ QSKOMJI GJ P �HIMN� GJ OJPPJ�OM SK GJ QH G�`LMNMSL OKIIx`�J SK LSL _ � �HL� SMLQ JPPJ H KL OSáN R SKI PJOSGJ RISGKMN �KM GSMN GHLQ NSKQ PJQ OHQ JL NJLMI OS�RNJ _ nJPH JQN RHINMOKPM/IJ� JLN VIHM GHLQ PJ OHGIJ GJR SPx� SIR� MQ� J RHIH��NIM�KJ 0 PH ÷� _ � HLQ PJ � SG/PJ � MaNJ ôSLONMSLLJP�M�R �IHNMô MP JQN L�OJQQHMIJ G �HòSKNJIGJQ ó ¥<; :;? F R SKI PJQ �VHPKHNMSLQ G �JaRIJQQMSLQ GHLQ PH Q��KJLOJ HK OHQ S� PJ RISñIH�� JKI HKIHMN ôHMN KLJJIIJKI _ nJPH L �JQN RHQ JLNM/IJ� JLN QHNMQôHMQHLN _ yHI JaJ�RPJ �O�J� J LJ P �MLN/ñIJ RHQ _ nJPH LJ P �J�R �O�J RHQGJ � HLMRKPJI GJQ ôJI� JNKIJQ _^45=78» 8> 4ðñ 8>» �H QNIKONKIHNMSL G �KLJ HRRPMOHNMSL �T ò JONMVJ nH� P R JKN KNMPMQJI PJQ � SGKPJQ RHIH���NI�Q uôSLONJKIQv SK G�`LMI KLJ � M�IHIO� MJ GJ OPHQQJQ � JN TMJL QáI � Ma JI PJQ GJKa SIñHLMQHNMSLQ _ �JQ � SGKPJQRHIH��NI�Q GHLQ PJ OHGIJ GJQ NxR JQ HTQNIHMNQ GJ GSLL�JQ QSKõ IJLN GK T JQSML GJ NIHLQ� JNNIJ KLJ ML ôSI� HNMSLGJ NxR JQ R SKI MLGM�KJI PJ RHINHñJ JLNIJ PJQ � SGKPJQ RHIH�/NIJQ G �KL ôSLONJKI _ �L IJVMJLN 0 PH GMQOKQQMSLRI�O�GJLNJ JLNIJ ML ô�IJLOJ JN V�IM`OHNMSL QNHNM�KJ � JN GSLO 0 PH QxLNHaJ GJQ NxR JQ JN GJQ QMñLHNKIJQ GJ NJPQ � S�GKPJQ _ �J � SG/PJ ST ò JN G ��T ò JONMVJ nH� P R JI� JN G �KLJ RHIN GJ RISñIH�� JI GHLQ KL QNx PJ ôSLONMSLLJP�ST ò JNJN G �HKNIJ RHIN ôHOMPMNJ P �MLNJISR �IHTMPMN� HVJO G �HKNIJQ PHLñHñJQ ST ò JN QHLQ HVSMI 0 � SGM`JI PJ PHLñHñJ _ nJINJQQSL R SPx� SIR� MQ� J GJ IHLñ�JQ GMõ/IJ GK � SG/PJ ST ò JN �HTMNKJP � � HMQ R JKN R SKI KLJ RIJ� M/IJ PJONKIJ �NIJRI�QJLN� 0 PH � HLM/IJ GK R SPx� SIR� MQ� J G �MLOPKQMSL GJQ PHLñHñJQ ST ò JNQ OPHQQM�KJQ _ oP PK M � HL�KJ KLJ I�QS�PKNMSL GJ PH QKIO�HIñJ �KM LJ QKRRSINJ RHQ PJQ H�TMñKòN�Q PM�JQ 0 P �ML ô�IJLOJ GJ NxR JQ _ �L Q �HR JI�SMN �KJ PHQNIKONKIHNMSL G �HRRPMOHNMSLQ H T JQSML G �ML ôSI� HNMSL GJ NxR JQ GSLL�JQ RHI PJ RISñIH�� JKI _�� �ó ôõö öõó� ��ó��� UL möör n�IMQNMHL wKJMLLJO JN yMJIIJ 'JMQ GSLLHMJLN KL �NHN GJQ PMJKa JN R JIQR JONMVJQ R SKI PH RISñIH��

� HNMSL HRRPMOHNMVJ GHLQ PH IJVKJ ��o $ms³% _ �L x PMQHMN y6 Q P:;Ez;:¥ND8 FB>>÷F @ zE¥? G? :øB8 ¥>9B 8D E8F D¥;? ¥? 8F ¥@@ D:>¥9:= F E8L<¥:9 F P¥>>GC@¥?;8< E¥;F D8F>:;ø ù E:K ¥;F E PB;8 @ 8<>z8 E8 >8F D¥;? ¥? 8F E¥;F D8 C G;E8 :;EBF9<:8DH 78998 E:V BF:G; ;8 F8<¥ @¥FF¥;F <¥@@ 8D8< >8D D8 E8 X ¥F>¥ D E¥;F D8F ¥;; z8F úûJ ù >8>: @ <÷F øB8 D8F D¥;? ¥? 8F ¥@@ D:>¥9:= F @ <G>B<8;9E8F 9<¥:9F @ DBF @ B:FF¥;9F øB: D8B< >G;= z<8<G; 9 F¥;F EGB98 B; 8 @ DBF ? <¥;E8 DG;? zL:9z H W

�J OSPPS�KJ QOMJLNM`�KJ JL P ��SLLJKI GJ �JHL�tIHL�SMQ yJIISN $sø% QKI PJ N�/� J 6sø HLQ HRI/Q y S� JL QSLNPJQ ST ò JNQW Q �JQN OSLOPK RHI KLJ NHTPJ ISLGJ OS�� JLNHLN PH I�OJLNJ GMQOKQQMSL JLNIJ ! MO�HIG ­HTIMJP $rn % JN­Kx �NJJPJ $mn³% QKI 6PJQ ST ò JNQ SLN�MPQ �O�SK� ÑW_ n�IMQNMHL wKJMLLJO MLNISGKMQHMN QH I�R SLQJ RHI PH R�IHQJQKMVHLNJ y

6Q¥ øB8F9:G; ;8 F8 @GF8 ¥NFGDBC 8;9 @ DBF ü D8F GNý 89F G;9 ? ¥?; z H H H D8B< @ D¥>8 E¥;F D8F >8<L8¥BK E8FEzL8DG@@ 8B<F 89 E¥;F D8F >TB<F E8 D8B<F A:z<¥<>A:8F HW

wKJ Q �JQN�MP RHQQ� R JLGHLN OJQ QJRN HLQ Ñ �H VHñKJ �HVH Ñ UQN�OJ �KJ PJQ PHLñHñJQ ôSLONMSLLJPQ QSLN JL VSMJGJ 6yISPSñ MQHNMSLW ÑySKI I�RSLGIJ 0 OJQ �KJQNMSLQ PM�JQ � KL IJñHIG QKI PJ RIS O�J RHQQ� R JKN �OPHMIJI PH QMNKHNMSL HONKJPPJ _ �LR JKN Q�RHIJI PJ G�VJPSRR J� JLN GJQ PHLñHñJQ ST ò JNQ JL GJKa TIHLO�JQ � PH TIHLO�J 6� SPPJW GJ �� HPP�HP� MQQKJGJ PH OS��KLHKN� � MQR JN KLJ TIHLO�J RPKQ 6GKIJW OS�� J UMõ JP MQQKJ GJ P �MLñ�LMJIMJ PSñ MOMJPPJ _ �HVH HRRSINJ

Page 136: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�µ � o�� o� Ê�°�� ¶ ¯�Ê� Ê� ² °�� Ê� � ° Ê�°�� mse

KLJ QSINJ GJ I�OSLOMPMHNMSL � HKNSIMQHLN G �KL O�N� PH I�ÀJaMSL JN PJ O�HIñJ� JLN GxLH� M�KJ NSKN JL MLQMQNHLNQKI P �M�R SINHLOJ GK NxRHñJ QNHNM�KJ _ oP I��HTMPMNJ HK RHQQHñJ PH OS�RMPHNMSL VJIQ GJQ � HO� MLJQ VMINKJPPJQ �PH ñJQNMSL HKNS� HNM�KJ GJ PH ��� SMIJ JN ôHMN HOOJRNJI PJ NIH�HñJ GJQ JaOJRNMSLQ RHI PJ RISñIH�� JKI _ nJ6OS O�NHMP MLLSVHLN GJ QSPKNMSLQ �OKP�JQW HRRHIK HK T SL � S� JLN � QSKNJLK RHI P �MLGKQNIMJ � VH QJ G�VJPSRR JI GJôH�SL MLOISxHTPJ uJN GMi OMPJ� JLN RI�VMQMT PJ 0 P ��RS�KJv GJ NJPPJ QSINJ �K �MP LJ IJQNJ �KHQM� JLN �KJ PKM _ ù PSIQ8K :9 �� HPP�HP� � UMõJP � � MQR SK ÷� ÑoP JQN R JKN��NIJ RI�ô�IHTPJ G �HVSMI KL IJñHIG RPKQ SRNM� MQNJ QKI OJNNJ R �IMSGJ _ �H OSLOJRNMSL JN P �M�RPHL�NHNMSL GJ �HVH JQN JL ôHMN KLJ O�HLOJ R SKI PH TIHLO�J ôSLONMSLLJPPJ RHIOJ �K �JPPJ òKQNM`J ¥ @ GF98<:G<: PJQO�SMa G �M�RPHLNHNMSL JN GJ NxRHñJ _ �JQ RI�QJLNHNMSLQ GJQ JLVMISLLJ� JLNQ u� HO� MLJ HTQNIHMNJ � TMTPMSN�/�KJG �Ja�OKNMSL � OS�RMPHNJKIv QSLN �KHQM� JLN MGJLNM�KJQ JLNIJ �HVH JN �T ò JONMVJ nH� P _ nJINJQ MP x H KLJ MLÀKJLOJGK � SG/PJ ST ò JN x OS�RIMQ JL nù÷� �KM T²NMN HPSIQ KLJ JaNJLQMSL ST ò JN $msû% � � HMQ SL R JKN HKQQM � JQKIJI

KLJ MLÀKJLOJ MLVJIQJ _ � MJL �KJ PJ OSLOJRNJKI GJ �HVH MLQMQNJ QKI PH QáIJN� HRR SIN�J RHI PJ NxRHñJ QNHNM�KJ �PJQ RISñIH�� JQ �HVH L�OJQQMNJLN GJ LS�TIJKa NJQNQ GJ NxR J GxLH� M�KJQ _ nJPH JQN RIMLOMRHPJ� JLN Gá 0P �HTQJLOJ GJ OPHQQJQ RHIH��NI�JQ uSK 98C@ D¥98F R SKI IJRIJLGIJ PH NJI� MLSPSñ MJ nþþ v _ �H RIS O�HMLJ VJIQMSLGJ �HVH MLN�ñIJIH KL ��OHLMQ� J RIS O�J GJ ­JLJIMO �HVH $sr% HKNSIMQHLN GJ NJPPJQ G�OPHIHNMSLQ JN P ���KMR J GJ÷ MOISQSôN 0 nH�TIMGñJ NIHVHMPPJ QKI PJQ ? 8;8<:>F$ös% RSKI _�U� _ nJQ LSKVJPPJQ JaNJLQMSLQ QJ IHRRIS O�JLNHPSIQ GK R SPx� SIR� MQ� J RHIH��NIM�KJ 0 PH ÷� _

nJQ G�VJPSRR J� JLNQ JõJONK�Q JL RHIHPP/PJ JLNIJ PJQ � SLGJQ HOHG�� M�KJQ R SKI PJQ PHLñHñJQ ôSLONMSLLJPQ JNPJQ � SLGJQ MLGKQNIMJPQ R SKI PJ � SG/PJ ST ò JN 0 PH �HVH Q �MLÀKJLOJLN _ oP L �x H RHQ GJ IHMQSL �KJ OJPH O�HLñJGHLQ PJ ôKNKI RIS O�J _ �L VSMN GMi OMPJ� JLN PH OS��KLHKN� HOHG�� M�KJ GJQ PHLñHñJQ ôSLONMSLLJPQ NxR �Q RHQQJIHKa ST ò JNQ NJPQ �KJ OJKa GJ �HVH _ � J P �HKNIJ O�N� P �HNNIHMN GK ôSLONMSLLJP NxR � GHLQ P �MLGKQNIMJ LJ IMQ�KJ RHQGJ QKTMI RPKQ �K �KL ôI�� MQQJ� JLN GHLQ PJ OHQ S� GJQ HRRPMOHNMSLQ 6R�HIJQW HIIMVJLN 0 RIS� SKVSMI PJ � SG/PJ _� �HL� SMLQ MP JQN MLN�IJQQHLN GJ G�NJI� MLJI GHLQ �KJPQ GS� HMLJQ PJQ MLÀKJLOJQ VSLN Q �JõJONKJI _ �J 6GKIOMQQJ�� JLNW GJQ PHLñHñJQ ST ò JNQ HRR SIN�Q RHI PJQ ? 8;8<:>F VH HKNSIMQJI OJINHMLJQ HLHPxQJQ QNHNM�KJQ GJQ RISñIH�� JQQJ IHRRIS O�HLN GJ OJPPJQ Jõ JONK�JQ JL ÷� OS�� J P �HLHPxQJ GJ ÀSNQ G �ML ôSI� HNMSLQ $msø% � GJ G�NJONMSL G ��O�HR�R J� JLN G �JaOJRNMSLQ SK QKI PJQ QxQN/� JQ GJ NxR JQ ST ò JNQ � OS�� J ÷��QKT $s³% � R SKVHLN G�T SKO�JI QKI GJQRISNSNxR JQ R SKI �HVH OS�� J � MOJú� _ � ��VSPKNMSL GJ PH QNIKONKIHNMSL R JKN HKQQM IJò SMLGIJ GJQ RI�S OOKRHNMSLQMQQKJQ GJQ ST ò JNQ OS�� J PJQ C:K :; $ûn% _

� J P �HKNIJ O�N� � PJ ôSMQSLLJ� JLN G �JLVMISLLJ� JLNQ � PH IMO�JQQJ GJQ TMTPMSN�/�KJQ GJQ SKNMPQ MLGKQNIMJPQ HMLQM�KJ PJQ ��N�SGSPSñ MJQ GJ G�VJPSRR J� JLN � LJ R JKVJLN PHMQQJI MLQJLQMT PJ PJ RISñIH�� JKI _ �JQ HRRPMOHNMSLQML ôSI� HNM�KJQ Q �HNNH�KJLN 0 GJQ RISTP/� JQ GJ RPKQ JL RPKQ LS�TIJKa JN GJ RPKQ JL RPKQ OS�RPJaJQ _ oP GJVMJLNHPSIQ L�OJQQHMIJ GJ R SKVSMI KNMPMQJI GJ NJPQ SKNMPQ SK GK � SMLQ G �MLNJISR �IJI HVJO JKa _ �J RISñIH�� JKID¥C NE¥ H RIMQ P ��HTMNKGJ G �KL OJINHML OSL ôSIN GJ NIHVHMP GJ RHI P �KNMPMQHNMSL GJ OJQ SKNMPQ JN JLVMISLLJ� JLNQ _� MJL �KJ QSL ��NMJI �VSPKJ VJIQ PH RHIH��NIMQHNMSL GJ RISñ MOMJPQ SK PH OS�RSQMNMSL GJ OS�RSQHLNQ � MP PK MIJQNJ NSKò SKIQ KLJ RHINMJ QR �OM`�KJ 0 OSLOJVSMI JN 0 �OIMIJ _ ySKI OJNNJ RHINMJ P0 MP RHIH�N IHMQSLLHTPJ JN KNMPJuR SKI PH TMSGMVJIQMN� H�TMHLNJv GJ R SKVSMI KNMPMQJI GJQ PHLñHñJQ GJ PH ôH� MPPJ GJ ÷� _ � �MLNJISR �IHTMPMN� HVJOG �HKNIJQ PHLñHñJQ JN HVJO GJQ JLVMISLLJ� JLNQ JQN HPSIQ KL R SMLN OIKOMHP _

ÿ ÿ�� �� � �� ���� ���

ý¡Z [£_ Yµ¾ª¤£_¥¾¤«_ YZ_ª

Page 137: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

msû o�p¯°±� � � ° Ê�°�� � qp¯¯� ° op±°���

Page 138: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

Ý� ÚÝ×����� Ý�

��� ����� � � �� �!�"##� � $ �� % �"!&" � ' � �� "( )*+, � - � �.LH/ MO N.RMLñ ML R SP./ SIR0 MO PHLñKHñJQ _12345¥ 6 27 8359:;25¥ 6 X 42< 4¥==;5< >? � @AHLVMJI _ �BBCD ? ���E �FG _�H� � �"#IJK � L �� "( MNII+�K � O � P :439:34Q ¥5R Í5:Q4S 4Q:¥:;25 27 T2=S 3:Q4 U 42<4¥= V W oX y YZ[[ ?\][^]_ ? �B`a V�F� ���(,� � M �� "( �!J � � � b]/cdeZYfgdYZh^Zg ^.c Z YZh]_[^Yih^d]_ j]Y c ]e./ ]Yc0dh ek_liklZ[ V m_8359:;25¥ 6 U 42<4¥==;5< ¥5R T2=S 3:Q4 n 49o;:Q9:34Q @�BBFD V�p� ���(,� � M �� q#JJ� � � L �� "( L �&rI � s � t � ukYvklZ h]eeZh^d]_ j]Y [^Y]_le.f^.c Zg ek_liklZ[ i[d_lYi_f^d/ Z ^.c Z YZh]_[^Yih^d]_ V m_ w ÍPU ¥5R 8359:;25¥ 6 U 42< 4¥==;5< @�BBp D ? cc V �HEHF V�C� �xJ � � �� "( y##+�K � s � 835R¥:;25z 27 T2=S 3:Q4 P 9;Q59QV {YZZ/ k_ k_g h]/ck_.? �BBH V�a� � �##"!"( � M � X.cklZ gi v.^Zh]gZ bk/ e V m_ 12345 |Qz 84¥592S o25 Qz RQz w¥5< ¥< Qz nSS 6;9¥:;7 z @Ak_}dZY VHGGHD ? m_Ydk V�~� � �JK(" � � ��� �� x� �##JN� � t �� JNI�K"�N � O �� "( ��KJN!, � % � �g}k_hZg �Y]lYk// d_l {Zkf^iYZ[ d_ �v� Zh^d}Z bk/ e V m_ �:o � 4¥� ;6;¥5 P�=S2z;3= 25 U 42< 4¥==;5< w¥5<3¥< Qz @Aid_ HGGHD V�`� � ��"# � � � �i_^d/ Z ^kl[ kYZ_ �^ _ZhZ[[kY.V w ;zS ¥5R P�= �26;9 T2=S 3:¥:;25 @�B`BD V�B� � ��"# � � �� "( s�+ � � � b]_^d_ik^d]_fck[[d_l [^.eZ ? he][iYZfck[[d_l [^.eZ V m_ P�=S2z;3= 25 U 4;59;S 6Qz27 U 42< 4¥==;5< w¥5<3¥< Qz @�B`BD V��G� � ��"# � � �� �N""K � - � � �� "( -�� �� � ' � � �^k_gkYg W� h]/cdeZY V m_ 8359:;25�6 U 42<4�== ;5<w�5<3�< Qz �5R T2=S 3:Q4 n 49o;:Q9:34Q @�B`~D ? u V � V Zgd^]Y ? �g V���� � ��"# � � � � � = 2RQ45 92=S ;6Q4 ;=S 6Q= Q5 :�:;25 ;5 TV bk/vYdglZ �_d}ZY[d^. �YZ[[ ? �BB` V��H� � ��"# � � � � � = 2RQ45 92=S ;6Q4 ;=S 6Q= Q5 :�:;25 ;5 �w V bk/vYdglZ �_d}ZY[d^. �YZ[[ ? �BB` V��F� �!�I(!JK� � s � �Yek_l ? vd^[ ]j 0d[^]Y.? �]Yg[ ]j kg}dhZ[ ]j ZYdh[[]_ cY]gih^[ ? �BB` V��p� '�!K�"! � � �� "( '!�II"( � % � {kbd�Z � k {i_h^d]_ke b]_[^Ykd_^ �dvYkY. V m_ T� Tw �UP  û¡ @HGG �D V��C� '�!(#"(( � s � q � b]/ckh^d_l lkYvklZ h]eeZh^d]_ � d^0 k/vdli]i[ Y]]^[ V XZh0 V �Zc V ``¢H ? £ dld^ke�¤idc Z/ Z_^ b]Yc ]Yk^d]_ @¥ ��D ? {¦}YdZY V �B`` V��a� '�!(#"(( � s � q � W ][^e.fh]c.d_l lkYvklZ h]eeZh^d]_ cdh§[ ic lZ_ZYk^d]_[ k_g hþþ V XZh0 V YZc V? £ dld^ke�¤idc Z/ Z_^ b]Yc ]Yk^d]_ @¥ ��D ? �h^]vYZ V �B`B V��~� '�,#", � % �� "( �"¨ ", � � � m/ceZ/ Z_^d_l W� ]_ gd[^Ydvi^Zg / Z/]Y. /ie^dcY] hZ[[]Y[ V m_ ©24ªzo2S25 w�5<3�< Qz« T2=S ;6Q4z �5R ¬35 ­;= Q ®5¯;425= Q5:z 7 24 ° ;z:4;�3:QR � Q=24� � 36:;S 429Qzz24z @�BBHD ?�bW V��`� '"K(JK � � �� ±"KK"�, � � �� "( )NII"# � O � b]/cded_l �^k_gkYg W� ^] Ak}k \.^Zh]gZ[ V m_ �5:Q4²5�:;25�6 T257 Q4Q59Q 25 8359:;25�6 U 42<4�== ;5< @�Zc^Z/vYZ V �BB`D V��B� '"!(xJ��"N � ' �� "( M"!�"K( � � � $ � �Y]lYk// d_l � d^0 v Z0k}d]Y[ d_ k_ W� jYk/ Z�]Y§ ? ^0Z [._^k³k_g [Z/ k_^dh[ ]j �b� V m_ ® 3S24Q�5 P�=S2z;3= �5 U 42<4�==;5< ´®P�U  µ¶· @�BBp D V�HB

Page 139: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�FG ¸¹¸º¹»¼½¾¿À¹Á�HG� '*Â�� �K � s �� J�K(" � % �� ���J#� � � �� �N"�KK"& � �� "( -�K�, � à � HG k_[ kcYÄ[ � ]Å Z_ []_^eZ[ ]v� Z^[ Æ m_ T26 62Ç3 Q z9;Q5:;È Ç3 Q Q5 6  o255Q34 RQ 1Q�5²84�5É2;z U Q442: @�h^]vYZ V HGGFD ? A Vf�V \Yd]^ ?�g V�H �� '#J&x � $ � �5;:;�:;25 Ê 6� S 42< 4�== �:;25 �¯Q9 P9o Q= QV �gd^d]_[ ^Zh0_dc ? HGG �V�HH� 'J"x� � L �� � "�I"! � � �� "( '�!(#"(( � s � q � ukYvklZ h]eeZh^d]_ d_ k_ i_h]]c ZYk^d}Z Z_}dY]_/ Z_^ VP27 :Ë �4Q ² U 4�9:;9Q �5R ®ÌS Q4;Q59Q @�Zc^Z/vYZ V �B``D V�HF� 'JII"! � � ��O �� "( �#�"!(� � q � � �Z³c ¦YdZ_hZ �b�� V m_ 12345|Qz 84�592S o25 Qz RQz w�5< �< Qz nSS 6;²9�:;7 z @Ak_}dZY V HGGFD ? m_Ydk V�Hp� 'JN#�* � M �� L�!��K � � �� "( ) �J�JJ � ) � W ]gieZ[ ? ]v� Z^[ Z^ hkehie j]Y/ Ze V m_ 12345 |Qz 84�592S o25QzRQz w�5< �< Qz nSS 6;9�:;7 z @Ak_}dZY V �BBBD ? m_Ydk V�HC� 'JN!�JK&#" � q �� "( � "! � M � X.c Zfh0Zh§d_l 0dl0ZYf]YgZY c ]e./ ]Yc0dh /ie^df/ Z^0]g[ V m_ P�=S2²z;3= 25 U 4;59;S 6Qz 27 U 42< 4�== ;5< w�5<3�< Qz @�kYd[ ? {Yk_hZ ? �CE �~ �BB~D ? cc V FGHEF �C V�Ha� '!�&x� � O �� Ã�"!Ir, � � �� M(JN!���K" � - �� "( ���#"! � % � W k§d_l ^0Z ji^iYZ [kjZ jY]/ ^0Zck[^ � �ggd_l uZ_ZYdhd^. ^] ^0Z Ak}k �Y]lYk// d_l �k_liklZ V m_ n T� P�ÍUwnÎ T257 Q4Q59Q 25��Ï Q9:²�4;Q5:QR U 42< 4�== ;5< P�z:Q= « w�5<3�< Qz �5R nSS 6;9�:;25z ´��UPwn  µÐ· @�h^]vYZ V �BB`D V�H~� '!,�JJ � � �� -N!�K� � � �� ��KJN!, � % �� �N"�KK"& � �� "( MJ!�� � � � �_ h¦g¦Y]/ c]iY [h0Z/ Z Ñh0khi_ []_ Z_^YkÒ_ZiY ? i_ Z_^YkÒ_ZiY c ]iY ^]i[ V m_ T26 62Ç3Q �5:Q45�:;255�6 z34 6Qz ­Ó� ÓTÓ® Ó R  ;5< |5;Q34Q: RQ 6  ;5R3z:4;Q @Ô]}Z/vYZ V HGGHD V�H`� ��"# � �� x� �##JN� � t �� "( t�"! � s ��� � �ccedhk^d]_[ gi ^]ceZ}Ze Z/vkY¤i¦ g �]v� Zh^d}Z hk/ e Vm_ 12345|Qz 84�592S o25Qz RQz w�5< �< Qz nSS 6;9�:;7 z @Ak_}dZY V HGGp D ? m_Ydk V Õ ckYkÒ^YZ V�HB� �!�"##� � $ � X0Z ji_h^d]_ke k[v^Ykh^ / kh0d_Z V U 26�= 24S o;z= @�B`FD V�FG� x� �##JN� � t � T2=S ;6�:;25 RQz 6�5< �< Qz 7 259:;255Q6z Ö TQ�w 35 :4�R39:Q34 �w ¯Q4z TV X0Ä[Zg �i_d}ZY[d^¦ ? �_d}ZY[d^¦ �kYd[ × mm ? Ô]}Z/vYZ V �BB �V�F �� x� �##JN� � t � � b]_[ZY}k^d}Z ukYvklZ b]eeZh^]Y � d^0 �/vdli]i[ �]]^[ j]Y �^k^dh X.c Zh0Zh§d_l�k_liklZ[ V m_ �5 :Q45�:;25�6 ©24ªzo2S 25 � Q= 24� � �5�< Q= Q5: @�Zc^Z/vYZ V �BBHD ? �cYd_lZYf×ZYekl ?�g V? _] V aF~ d_ �Ôb� ? �bW �mu���Ô ? cc V H �`EHHB V�FH� x� �##JN� � t � �_ �Ø hdZ_^ ¥k. ]j b]/cded_l W� ^] b V m_ ©24ªzo2S 25 �w �5R ;:z nSS 6;9�:;25z@Aid_ �BBHD ? �bW �mu���Ô V�FF� x� �##JN� � t � £._k/ dh �v� Zh^ X.cd_l d_ �v� Zh^d}Z bk/ e V m_ U 429QQR;5< z �5:Q45�:;25�6 w ;zS T257 Q²4Q59Q @�h^]vYZ V HGGHD V�Fp� x� �##JN� � t �� J�J�K"( � �� "( J�J�K"( � % � {d_d^Z £]/ kd_ b]_[^Ykd_^[ d_ ^0Z W� {i_h^d]_ke�k_liklZ V m_ �:o �5 :Q45�:;25�6 T257 Q4Q59Q 25 ­226z Ë ;:o n 4:;È 9;�6 �5 :Q6 6;< Q59Q @�BBp D ? �bW V�FC� x� �##JN� � t �� "( JNI�K"�N � O � �Y]lYk// d_l m/ klZ[ d_ W� V m_ ©24ªzo2S 25 �w �5R ;:znSS 6;9�:;25z @Aid_ �BBHD ? �bW �mu���Ô V�Fa� x� �##JN� � t �� "( qJ�I, � � bk/ ef{ edl0^ � d/cek_^k^d]_ Z^ kccedhk^d]_[ V m_ 12345 |Qz 84�592S o25QzRQz w�5< �< Qz nSS 6;9�:;7 z @Ak_}dZY V �BBCD ? m_Ydk V�F~� x� �##JN� � t �� "( qJ�I, � � � c]Y^kveZ m/ceZ/ Z_^k^d]_ j]Y �v� Zh^d}Z hk/ e {edl0^ V U �4�6 6Q6 U 42²9Qzz;5< wQ::Q4z? F @HGGFD V @A]iY_ke }ZY[d]_ ]j �F`� VD V�F`� x� �##JN� � t �� "( qJ�I, � � � c ]Y^kveZ d/ceZ/ Z_^k^d]_ j]Y ]v� Zh^d}Z hk/ e Ù dl0^ V m_ P Q925R©24ªzo2S 25 Ú ;<o²wQ¯Q6 U �4�6 6Q6 U 42< 4�== ;5< �5R nSS 6;9�:;25z @Aid_ HGGFD V�FB� x� �##JN� � t �� "( L"K!, � O � � �� khkY¦ ? i_Z d_^ZYjkhZ ]v� Z^ c ]iY Z_^YZ ]v� Zh^d}Z hk/ e Z^ � k}k V m_w�5< �< Qz Q: � 2RÛ6Qz Ê ��Ï Q:z @W kY[ V HGGp D V Õ ckYkÒ^YZ V�pG� x� �##JN� � t �� ��KJN!, � % �� "( %���KJ � ' � X.c Z[ v Z0d_g ^0Z / dYY]Y � k cY]c ][ke j]Y ckY^dke / e^.c Z YZh]_[^Yih^d]_ k^ Yi_^d/ Z V m_ ­�S Qz ;5 T2=S ;6�:;25 @Aid_ �BB~D V

Page 140: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

¸¹¸º¹»¼½¾¿À¹Á �F ��p �� x� �##JN� � t �� ��KJN!, � % �� "( %���KJ � ' � ° |¯Q62SS Q= Q5: R  nSS 6;9�:;25z �¯Q9 ��Ï Q9:;¯Q T�= 6?�[^ Zg V � ��Zdee.? HGGG V ]_fed_Z Z_led[0 }ZY[d]_ � ÜÝÝÞ ßààáâãä åæçè æâ åéè V�pH� x� �##JN� � t �� �JK("#�(�&� � ) �� "( %���KJ � ' � �b�W d� i_ h]/cdek^ZiY �v� Zh^d}Z bk/ e c ]iYVÔ�X V m_ T257 |4Q5 9Q �5 :Q45�:;25�6Q RQz 9o Q49o Q34z ¯;Q:5�= ;Q5z Q: 84�592S o25 Qz Q5 �57 24= �:;Ç3Q´¬� ê8  ë¶· @{¦}YdZY V HGGp D V�pF� x�(("!ì"" � M �� '#"##J&x � O � t �� "( í��x� � � � �hk_ �Yd/ d^d}Z[ j]Y ×Zh^]Y b]/ci^ZY[ V m_U 429QQR;5<z P3S Q492=S 3:;5<  µë @Ô]}Z/vYZ V �BBGD ? cc V aaaEa~C V�pp� #�K�"! � � �� "( )""I � s � �Z}d[Zg4 YZc ]Y^ ]_ ^0Z kel]Yd^0/ dh ek_liklZ [h0Z/ Z V XZh0 V YZc V? �bW�d[c �]d_^ZY[ ? �BB �V�pC� JK&xJK � M �� "( q"II�K( � q � $ � A] hk/ e � W ]vdeZ klZ_^[ j]Y �v� Zh^d}Zfbk/ e V m_ 8 ;4z: �5 :Q45�:;25�6P�=S2z;3= 25 n< Q5: P�z:Q= z �5R nSS 6;9�:;25z ´nPn  µµ·î ­o;4R �5:Q45�:;25�6 P�=S2z;3= 25 � 2�;6Qn< Q5:z ´�n  µµ· @�ke/ �cYd_l[ ? b� ? � �� ? �BBBD V�pa� JNI�K"�N � O � � \YdZj ï d[^]Y. ]j b�W� V ÜÝÝÞ ßààððð åÞÞñ åòóññæôó åéèàõáöóñæçôâà÷âã äàáâã äøÜ æñÝöèù åÜÝã ä ? �BBa V�p~� JNI�K"�N � O � bk/ e k^ �Ô� V m_ 8359:;25�6 w�5<3�< Qz ;5 :o Q �5:42R39:24�T2=S 3:;5< T344;93 63= @W kd �BBaD V�p`� JNI�K"�N � O �� N!�"K � % � $ �� "( ��NK, � � � X0Z hk^Zl]Ydhke kv[^Ykh^ / kh0d_Z V m_ 8359:;25�6U 42<4�== ;5< w�5<3�< Qz �5R T2=S 3:Q4 n 49o;:Q9:34Q @�B`CD ? �cYd_lZYf×ZYekl ? �g V�pB� JNI�K"�N � O �� "( ��NK, � � � nSS 429o Q 8259:;255Q6 6Q RQ 6� U 42<4�== �:;25 V �gd�hdZ_hZ ? �BBC V�CG� !��#�� � ) � bk/ e]^ V m_ ©24ªzo2S 25 �w �5R ;:z nSS 6;9�:;25z @Aid_ �BBHD ? �bW �mu���Ô V�C �� -�K"#N((J � � �� - � JI�J � ) �� $"!J, � ú �� "( %"#���((� � M � �kYkeeZe ji_h^d]_ke cY]lYk// d_l� d^0 [§ZeZ^]_[ � ^0Z �bk/ e�F� Z³c ZYd/ Z_^ V m_ U 429QQR;5<z n T� Ë24ªzo2S 25 �w �5R ;:z �SS 6;9�:;25z@�BB`D ? b]Y_Zee �_d}ZY[d^.V�CH� -�� �� ��&�N""K � O � % �� "( M"(x� � ) � �_ dgZke / ]gZe j]Y YZhiY[d}Z c ]e./ ]Yc0dh ^.c Z[ V m_P�=S2z;3= 25 U 4;5 9;S 6Qz 27 U 42<4�== ;5< w�5<3�< Qz @Ak_}dZY V �B`p D ? cc V �aCE �~p V�CF� -�� �I � L �� %�!ûN�"! � % �� "( M*K��r � � � ��ZZ^ 0kY/ ]_. � X0Z ^ke§¢hüü h]__Zh^d]_ V m_ w ;zS �5R8359:;25�6 U 42<4�== ;5< @�BBp D V�Cp� �" )�N�#�N�!" � - � hk/ ecp � �ZjZYZ_hZ / k_ike V XZh0 V YZc V? m_Ydk ? HGGH V ÜÝÝÞ ßààáâã ä åæçè æâ åéè V�CC� �" )�N�#�N�!" � - �� "( ��NK, � � � b0k/ ki � k_ W� gdkeZh^ � d^0 ¤i]^k^d]_[ ? lYk// kY[ ? k_g Z³^Z_f[dv eZ [._^k³ V m_ ©24ªzo2S 27 T2=S ;6Q4 ­Q9o5;Ç3 Qz 7 24 nSS 6;9�:;25 ° 2= �;5 w�5<3�< Qz �5R ®Ì :Q5z;�6Qw�5<3�< Q � 2RQ6z @�}Yde V �BBaD V�Ca� -"&rK"! � � �� -"&rK"! � � �� "( -�##J( � $ � ceild_ �hedc[Z c ]iY �v� Zh^d}Z bk/ e V XZh0 V YZc V?i_d}ZY[d^¦ �kYd[ a ? HGGF V �kcc ]Y^ gZ X�� V�C~� tK�"# � t � ®Ì :Q5z;25z zý4Qz Q: S 4�:;9��6Qz R3 z�z:Û= Q RQ :�2Qz RQ �w Q5 S 4|zQ59Q R  35 6�5< �< Q RQ= 2R36Qz Q: RQ :4�;:z ;=S |4�:;7 z V X0Ä[Z g �i_d}ZY[d^¦ ? i_d}ZY[d^¦ �kYd[ �ig ? W kd �BB` V�C`� q"##"�I"K � � �� "( q!�"���K � - � % � ­o Q w ;::6Q �wQ4V W mX �YZ[[ ? £ ¦hZ/vYZ V �BB~ V�CB� q �K�#"! � ) � ' �� #"�"K(I � s �� J!��& q#�K���K � � � q �� ±!�IxK��N!(x� � M �� M("&r#"! �% �� "( q"##"�I"K � � � £Y[h0Z/ Z � � cY]lk// d_l Z_}dY]_/ Z_^ j]Y [h0Z/ Z V 12345�6 27 8359:;25�6U 42<4�== ;5< ¡þ? H @W kYh0 HGGHD ? �CBE �`H V�aG� q �KK" � M �� $"�ì"K � - �� � "�ì"! � t �� "( sJK"I � M � % � ï ¢£dYZh^ � � \d_kY. {]YZdl_ �k_liklZ m_^ZYjkhZj]Y ïk[§Zee V m_ �5 :Q45�:;25�6 T257 Q4Q59Q 25 8359:;25�6 U 42<4�==;5< @�BB`D V�a �� q �KK" � M �� $"�ì"K � - �� � "�ì"! � t �� "( sJK"I � M � % � bkeed_l 0Zee jY]/ 0Zk}Z_ k_g 0Zk}Zk_ jY]/0Zee V m_ �5:Q45�:;25�6 T257 Q4Q59Q 25 8359:;25�6 U 42< 4�== ;5< @�BBBD V

Page 141: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�FH ¸¹¸º¹»¼½¾¿À¹Á�aH� qJ�I, � �� "( x� �##JN� � t � bk/ e {edl0^ � k �]Y^kveZ ��W£ �³^Z_[d]_ ]j W� j]Y £ d[^Ydvi^ZgW Z/]Y. Wie^dcY]hZ[[]Y[ V m_ T257 Q4Q5 9Q 25 Ú ;<o U Q47 24= �59Q 8359:;25�6 T2=S 3:;5< @�}Yde V �BBCD Vk}kdekveZ k^ éÝÞ ßààñæñâä åääçä åÿö�àÞó�àÜÞéáàÞâÞôèñ��àÞâÞôè �� åÞñ V�aF� qN!NI" � s �� "( � "�I � % � �_^Y¦Z¢�]Y^dZ[ gZ }keZiY[ Z_ bk/ e V m_ 12345|Qz 84�592S o25Qz RQz w�5< �< QznSS 6;9�:;7 z @Ak_}dZY V HGGGD ? m_Ydk V�ap� O��!�"# � ) � �v� Zh^[ 0k}Z jkdeZg ? Ô]}Z/vYZ V HGGH V ÜÝÝÞ ßààððð å�èôâã ñöçÿñ åáöãà��òôáÝ ñ�â�ôâæäô�âèèâÝ æ�ô åÜÝãä V�aC� O��!�"# � ) � % � �m�� � u]]g _Z� [ ? vkg _Z� [ ? 0]� ^] � d_ vdl V n � ®ÌS Q4: �? a @�BB �D ? FGEFB V�aa� O��!�"# � ) � % � U �::Q45z 27 P 27 :Ë �4Q Ö ­�6Qz 7 42= :o Q z27 :Ë �4Q 92==35;:� V �³j]Yg �_d}ZY[d^. �YZ[[ ?�BBa V ÜÝÝÞ ßààððð å�èôâã ñöçÿñ åáöãà�öö�ñ åÜÝãä V�a~� O���� � t �� L"#� � ) �� sJxKIJK � ) �� "( � #�II��"I � s � ° Qz;<5 U �::Q45zV �ggd[]_ ¥Z[eZ.? �BBC V�a`� O�!!��N" � s � �kv ZeZg k_g ]c^d]_ke kYli/ Z_^[ j]Y �v� Zh^d}Z bk/ e ? W kY[ V HGG �V�aB� O�!!��N" � s � b]gZ YZi[Z ^0Y]il0 c ]e./ ]Yc0dh }kYdk_^[ V m_ ©24ªzo2S 25 8235R�:;25z 2z P 27 :Ë �4Q®5< ;5 QQ4;5< @_]} HGGHD V�~G� O ��&�#JK" � � �� � �Ix!� � % �� "( %!�I�� � M � {khdeZ � � �.//Z^Ydh m_^ZlYk^d]_ ]j b]_hiYYZ_^ k_g{i_h^d]_ke �Y]lYk// d_l V �5 :Q45�:;25�6 12345�6 27 U �4�6 6Q6 U 42<4�== ;5< @�B`BD V�~ �� O#�I"! � L �� "( L"K�"!IJK � % � {i_h^d]_ke cY]lYk// d_l k_g []j^�kYZ Z_ld_ZZYd_l V�~H� OJ#��"!� � ' �� "( O#J�"! � � � �]e./ ]Yc0dh ^.c Z YZh]_[^Yih^d]_ j]Y lkYvklZ h]eeZh^d]_ � d^0]i^^kl[ V m_ T257 Q4Q59Q 25 w ;zS �5R 8359:;25�6 U 42<4�== ;5< @Aid_ �BBHD ? cc V CFEaC V�~F� OJ!�JK � � � s � �� � �#K"! � ) �� "( ���I¨J!(x � � % � ® R;5 �34<o w T8 V �cYd_lZYf×ZYekl ? \ZYed_ ?�B~B V�~p� OJ!�JK � ) � ® zzQ5:;�6 1Î� Ö 1�¯� Î �:;¯Q �5:Q47 �9QV �YZ_^dhZ ï kee ? �BBB V�~C� OJI#�K� � s � PS Q9;È 9�:;25z R3 6�5< �< Q 1�¯�V �i_ �YZ[[ ? HGGG V�~a� OJN��N#( � s � m_j¦YZ_hZ[ g �i_d^¦[ c0.[d¤iZ[ Z_ / e V m_ 12345 |Qz 84�592S o25 Qz RQz w�5< �< Qz nSS 6;9�:;7 z@Ak_}dZY V �BBp D ? m_Ydk V�~~� L� �KI � O �� "( $JN#"!�N" � q � {i_h^d]_ke \ie§ �._h0Y]_]i[ �kYkeeZe �Y]lYk// d_l i[d_l ^0Z \�W�fedv �dvYkY.V m_ T25z:439:;¯ Q � Q:o2Rz 7 24 U �4�6 6Q6 U 42<4�== ;5< ? � V u]Yek^h0 ? �g V? �g}k_hZ[ d_ b]/cif^k^d]_ � X0Z]Y. k_g �Ykh^dhZ V Ô]}k �hdZ_hZ ? kili[^ HGGH ? cc V �aCE �~` V�~`� L�!��K � � �� "( � ��N�*�-JKÂ"�N OJN�" � � � T259QS :z Q: 23:;6z RQ S 42<4�== �:;25 V m_^ZY�gd^d]_[ ?�BBH V�~B� L�!�"! � ) �� $"" � % �� "( % "KK�K� � q � X0Z {]³ cY]� Zh^ � �g}k_hZg ek_liklZ ^Zh0_]e]l. j]Y Z³^Z_f[dv eZ [.[^Z/ [ V XZh0 V � Zc V bW�fb�fB`f �G~ ? �h0]]e ]j b]/ci^ZY �hdZ_hZ ? bkY_ZldZ W Zee]_ �_d}ZY[d^.?� d^^[viYl0 ? �� ? Ak_ikY. �BB` V�`G� L�!!�IJK � ) � n �z:4�9: ° �:� ­�S Qz ;5 P :�5R�4R �w V A]0_ ¥ deZ. � �]_[ ? �BBH V�` �� L�!("# � % � L �� q""#", � � �� "( Q: �6V \Z_h0/ kY§d_l d/ceZ/ Z_^k^d]_[ ]j ji_h^d]_ke ek_liklZ[ � d^0��[Zig]§_]^� ? k Ù]k^fd_^Z_[d}Z v Z_h0/ kY§ V 12345�6 27 8359:;25�6 U 42< 4�== ;5< �? p @Aie �BBaD ? aH �EaCC V�`H� L""!"K � ' �� L��" � s �� "( M¨ �"!I(!� � M � - � �hYdc^d_l ^0Z ^.c Z d_jZYZ_hZ cY] hZ[[ V m_ �5 :Q45�:;25�6T257 Q4Q59Q 25 8359:;25�6 U 42<4�== ;5< @ÔZ� �]Y§ ? HGGFD ? �bW �YZ[[ ? cc V F E �F V�`F� L""!"K � ' �� $"�ì"K � - �� "( ��K �sÂ"K�JJ!K � � � ïZedi/ ? j]Y eZkY_d_l ïk[§Zee V m_ n T� P;<S 6�5þëë� Ú �zªQ6 6 ©24ªzo2S @ÔZ� �]Y§ ? HGGFD ? �bW �YZ[[ ? cc V aH E ~�V�`p� L �!I&xJ¨ �( � � �� "( $"!J, � ú � W d³ d_ / ]gieZ[ d_ k hkeefv.f}keiZ [Z^^d_l V m_ U 42<4�== ;5< w�5<3�< Qz�5R P�z:Q= z« ®P�U  þëëþ @HGGHD ? £ V �Z W ¦^k.ZY ? �g V? }]e V HFGC ]j wQ9:34Q Î 2:Qz ;5 T2=S 3:Q4 P 9;Q5 9Q?cc V aEHG V

Page 142: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

¸¹¸º¹»¼½¾¿À¹Á �FF�`C� LN"( � O � X0Z �Z_ h]/ci^k^d]_ke ed_lid[^dh[ ^] ]e§d^ V XZh0 V YZc V? �����m ? HGGH V�`a� LN"( � M � wQ 6�5< �< Q P926V ððð åñáöä�ÝôáÜçöäöÿæôñ åöèÿà�öðçäöâ� åÜÝã V�`~� LN�x"I � s � ¥ 0. {i_h^d]_ke �Y]lYk// d_l W k^^ZY[ V T2=S 3:Q4 12345�6 �þ? H @�B`BD ? B`E �G~ V�``� sJxKIIJK � � � �k/vgk edj^d_l � ^Yk_[j]Y/ d_l cY]lYk/ [ ^] YZhiY[d}Z Z¤ik^d]_[ V m_ T257 Q4Q59Q 25 8359²:;25�6 U 42< 4�= ;5< w�5<3�< Qz �5R T2=S 3:Q4 n 49o ;:Q9:34QÓ wÎ TP þë¡ @Ô k_h.? �B`CD ? �bW ? �cYd_lZY×ZYekl V�`B� sJK"I � ) �� "( $�KI � ) � Í�4��< Q T26 6Q9:;25 V ¥ deZ.? �BBa V�BG� ±"#I", � ) �� #�K�"! � � �� "( �t��(J!I� � s � ) � �Z}d[Zg5 YZc ]Y^ ]_ ^0Z kel]Yd^0/ dh ek_liklZ�h0Z/ Z V n T� P�ÍUwnÎ Î 2:;9Qz �� ? B @�BB`D ? HaE ~a V�B �� ±"KK"�, � � � £ d/ Z_[d]_ ^.c Z[ V m_ U 42<4�== ;5< w�5<3�< Qz �5R P�z:Q= z�®P�U  µ¶ « >:o ® 342S Q�5P�=S2z;3= 25 U 42<4�== ;5< @�gd_viYl0 ? � V� V? ��E �F �BBp D ? £ V �k__Zeek ? �g V? }]e V ~`` ? �cYd_lZY ?cc V Fp`EFaH V�BH� ±"KK"�, � � �� "( M,�" � - � £Z[dl_ k_g d/ceZ/ Z_^k^d]_ ]j lZ_ZYdh[ j]Y ^0Z V_Z^ h]//]_ ek_liklZYi_^d/ Z V m_ U 429QQR;5<z 27 :o Q n T� P�ÍUwnÎ þëë¡ 9257 Q4Q59Q 25 U 42<4�== ;5< 6�5<3�< Q RQz;<5 �5R;=S 6Q= Q5:�:;25 @HGG �D ? �bW �YZ[[ ? cc V �E �H V�BF� ±!N���"�� � � £W� � �kh§kld_l ï dl0f�Z}Ze £ d[^Ydvi^Zg �v[^Ykh^d]_[ d_ �W� V m_ ­o;4R �5 :Q45�:;25�6©24ªzo2S 25 P :�5R�4R �w @�BB �D V�Bp� $" q"II�K( � q �� "( ��!�K�"( � $ � �c^d/ d� d_l ck^^ZY_f/ k^h0d_l V m_ �5 :Q45�:;25�6 T257 Q4Q59Q 258359:;25�6 U 42<4�== ;5< @HGG �D ? �bW �YZ[[ V�BC� $"!J, � ú � �Y]lYk// k^d]_ gi [.[^Ä/ Z �_d³ Z_ bk/ e �dl0^ V XZh0_dhke YZc ]Y^ �p~ ? mÔ� m� ? �BBH V�Ba� $"!J, � ú � �_v]³Zg ]v� Zh^[ k_g c ]e./ ]Yc0dh ^.cd_l V m_ P�=S2z;3= 25 U 4;59;S 6Qz 27 U 42<4�== ;5<w�5<3�< Qz @�BBHD ? �bW �YZ[[ ? cc V �~~E �`` V�B~� $"!J, � ú � X0Z hk/ e edl0^ [.[^Z/ ? g] hi/ Z_^k^d]_ k_g i[ZY �[ / k_ike ? YZeZk[Z G V~p V XZh0 V YZc V? d_Ydk ?�BB~ V ]_fed_Z }ZY[d]_ � ÜÝÝÞ ßààáâãä åæçè æâ åéè V�B`� $"!J, � ú � X0Z Z� Zh^d}Z_Z[[ ]j ^.c Zfvk[Zg i_v ]³ d_l V m_ ©24ªzo2S 25 ­�S Qz ;5 T2=S ;6�:;25 @Aid_�BB~D V�BB� $"!J, � ú � 9�= 6Ï �¯�? HGGG V áâã ä åæçè æâ åéèàõ�äôèöùàñöéÝðâèô åÜÝã ä V��GG� $"!J, � ú � X0Z ]v� Zh^d}Z hk/ e [.[^Z/ YZeZk[Z F VGa � £]hi/ Z_^k^d]_ k_g i[ZY �[ / k_ike V XZh0 V YZc V?m_Ydk ? HGGH V ]_fed_Z }ZY[d]_ � ÜÝÝÞ ßààáâã ä åæçè æâ åéè V��G �� $"!J, � ú �� "( ��NK, � � � £._k/ dh[ d_ W� V 12345�6 27 8359:;25�6 U 42<4�== ;5< � ? p @�BBFD ?pF �EpaF V��GH� $ �KN���� V �_d[]_ � lkYgZ� }][ g]hi/ Z_^[ [._h0Y]_d[¦[ V w ;53Ì � �<�� ;5 Q? pH @�Zc^Z/vYZ V HGGHD V��GF� $J, � � �� t&rI("�K � ) �� �JJ� � - �� t##�J( � s �� "( J#" � ' � 1�¯� PË;5< V � ��Zdee.? HGGH V��Gp� ��!�K�"( � $ � �Z[ k}ZY^d[[Z/ Z_^[ gi � e^YklZ V m_ 12345|Qz 84�592S o25Qz RQz w�5< �< Qz nSS 6;9�:;7 z@HGGFD ? m_Ydk V��GC� ��NK, � � � �kY[ZY[ k_g cYd_^ZY[ k[ [^YZk/ gZ[^Yih^]Y[ k_g h]_[^Yih^]Y[ Z/vZggZg d_ ji_h^d]_ke ek_fliklZ[ V m_ U 429QQR;5<z 27 :o Q n T� T257 Q4Q59Q 25 8359:;25�6 U 42<4�== ;5< w�5<3�< Qz �5R T2=S 3:Q4n 49o;:Q9:34Q @�B`BD V��Ga� � "#x"� � � �� "( O#JÂ�& � - � U°® ° 2Qz U 63< ²;5z? HGGF V��G~� � �#K"! � ) �� �J (" � � �� "( L�!�"! � ) � ­oQ ° QÈ 5;:;25 27 P :�5R�4R �w V W mX �YZ[[ ? bk/vYdglZ ?W� ? �BB �V��G`� � JK("#�(�&&� � ) �� "( x� �##JN� � t � ° 293= Q5:�:;25 �5R R;z:4;�3 :;25 ? HGGF V ððð åÞÞñ åòóññæôó åéèàõãöçÝôäâàöáâã æä V

Page 143: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�Fp ¸¹¸º¹»¼½¾¿À¹Á��GB� � J!!�IJK � ) �� -"�!#" � � �� JKKJ! � ) � � L �� "( '!J¨ K � � � $ � �_ kg 0]h kccY]kh0 ^] ^0Zd/ceZ/ Z_^k^d]_ ]j c ]e./ ]Yc0d[/ V n T� ­4�5z�9:;25z 25 U 42<4�==;5< w�5<3�< Qz �5R P�z:Q= z ¡� ? F@Aie. �BB �D ? FpHEF~�V���G� �"(I&��" V Î Q:z9�S Q ÍQ9ª2 U 63< ²;5 nU� ¬Q7 Q4Q59Q? HGGH V ÜÝÝÞ ßàà�ô�ô�ÿô åçôÝñáâÞô åáöãàäæ�èâèùàã âçóâäñà����àÞäóÿæçà� å�à V����� � �rx�# � ) � �° êQ4z;25 µëÓë« ¬ Q7 Q4Q59Q � �53�6? BG V� Zg V W k[[kh0i[Z^^[ m_[^d^i^Z ]j XZh0_]e]l.?�kv ]Yk^]Y. j]Y b]/ci^ZY �hdZ_hZ ? bk/vYdglZ ? W k[[kh0i[Z^^[ ? � �� ? �BBG V���H� �J!� �� � % � � �Z^Y][c Zh^d}Z ]_ �kYkgdl/ Z[ ]j � m �Y]lYk// d_l ? Ak_}dZY V HGGF V ððð åçöè� æÿ åáöãà� æñÞ �èôÝèö åÜÝã ä V���F� �NK" � � �� %�#�J � % �� "( %"K� � ) � � [Zh]_g .ZkY h]iY[Z ]_ gk^k [^Yih^iYZ[ vk[Zg ]_ ji_h^d]_kecY]lYk// d_l V m_ 8359:;25�6 U 42<4�== ;5< w�5<3�< Qz ;5 ® R39�:;25 @�BBCD ? cc V aCE`p V���p� Ã'ì"&( �"&xKJ#J�, �K("!K�(�JK�# � �K& V ® 96;S zQ U 6�:7 24= ­Q9o5;9�6 �¯Q4¯;QË ? HGGF V���C� %�!K�I � - � $ � �]j^�kYZ �_ld_ZZYd_l �Y]lYk//Z[ kYZ _]^ b]/ci^ZY �hdZ_hZ �Y]lYk//Z[ V b���Zc]Y^ Fa �? W h W k[^ZY �_d}ZY[d^.? �BB` V���a� %�N#IJK � $ � � �w 7 24 :o Q ©24ª;5< U 42<4�== Q4? H_g Zg V bk/vYdglZ �_d}ZY[d^. �YZ[[ ? �BBa V���~� %"&ûN"( � $ � £¦h]i}YZ� ]v� Zh^dj hk/ e V w ;53Ì � �<��;5 Q? pF @�h^]vYZ V HGGHD V���`� %"ì&�& � � �� ���N"( � � �� "( í�KJ� �" � � � bk/ e kcceZ^ [icc ]Y^ ceild_ j]Y _Z^[hkc Z V XZh0 V YZc V?i_d}ZY[d^¦ �kYd[ a ? HGGH V �kcc ]Y^ gZ X�� V���B� %",(JK sJK"I � M � � ;zQ Q5 �3¯4Q RQz 6�5< �< Qz 7 259:;255Q6z RQ S 42<4�==�:;25 V £i_]g ? �BB~ V��HG� %J((�"! � q �� "( M��JK"( � � � m_j]Y/ k^d]_ Ù]� d_jZYZ_hZ j]Y / e V n T� ­4�5z�9:;25z 25 U 42<4�== ;5<w�5<3�< Qz �5R P�z:Q= z þ>? � @Ak_}dZY V HGGFD ? ��~E �C` V��H �� %N"# � $ �� "( MN !" � � � b]/cded_l ck^^ZY_ / k^h0d_l v. ^ZY/ gZh]/c][d^d]_ V m_ w ;zS �5R 8359:;25�6U 42<4�== ;5< @�BBGD V��HH� �N""K � - � � � W ]gieZ[ j]Y [^k_gkYg / e V U 429QQR;5<z n T� P�5S2z;3= 25 w ;zS �5R 8359:;25�6U 42<4�== ;5< @�B`p D V��HF� �N"�KK"& � � wQz 6�5< �< Qz w ;zS V m_^ZY�gd^d]_[ ? Ô]}Z/vYZ V �BBp V��Hp� �N"�KK"& � �� "( x� �##JN� � t � �_Z Z³c ¦YdZ_hZ gZ _]^k^d]_ gZ / k[[Z V m_ ­� T® þëëþ @Ô]}Z/vYZ VHGGHD V }ZY[d]_ h]/ceÄ^Z gd[c ]_dveZ Z_ ððð åæçéöÞ� åòóññæôó åéèàäæáôç áôà��� �àááÝàáéñèôÞöèÝ åÞ ñ åÿ! V��HC� �N"�KK"& � �� "( � "�I � % � �Y]lYk// k^d]_ kccedhk^d}Z ? ¦^k^ gZ[ edZi³ Z^ c ZY[c Zh^d}Z[ V ­Q9o5;Ç3Q Q:z9;Q59Q ;57 24= �:;Ç3 Qz ¡>? ~ @�BBaD ? �GGBE �G �F V��Ha� �N"!&�� � � � n 6< 24;:o= ;Ç3 QÓ T234z 92=S 6Q:« QÌ Q49;9Qz Q: S 42�6Û= Qz 4|z263z« :4�¯�3Ì S 4�:;Ç3Qz V ×idv ZY^ ?HGGH V��H~� )*�, � - � �[d_l ? �_gZY[^k_gd_l ? k_g �_Yk}Zed_l ^0Z �bk/ e �k_liklZ V m_ nSS 6;QR P Q= �5:;9z Ó nR²¯�59QR wQ9:34Qz Ó wÎ TP þ�µ>Ó? u V \kY^0Z ? �g V �cYd_lZY ×ZYekl ? HGGH ? cc V p �FECF~ V��H`� )*�, � - �� "( �JN�##JK � s � �v� Zh^d}Z W� � �_ Z�Zh^d}Z ]v� Zh^f]YdZ_^Zg Z³^Z_[d]_ ^] W� V ­o Q24�n5R U 4�9:;9Q 27 ��Ï Q9: P�z:Q= z ¶ ? � @�BB`D ? H~ECG V � cYZed/ d_kY. }ZY[d]_ kcc ZkYZg d_ ^0Z cY] hZZgd_l[]j ^0Z Hp^0 �bW b]_jZYZ_hZ ]_ �Yd_hdc eZ[ ]j �Y]lYk// d_l �k_liklZ[ ? �BB~ V��HB� )"��, � s � bW� � � ïdl0ZYf]YgZY b]_hiYYZ_^ �k_liklZ V m_ U 429QQR;5<z 27 :o Q n T� P�ÍUwnÎ T257 Q²4Q59Q 25 U 42<4�== ;5< w�5<3�< Q ° Qz;<5 �5R �=S 6Q= Q5 :�:;25 ´Uw°�  µ¡· « ­2425 :2« T�5�R� @�BB �D ?}]e V Ha ]j P� ÍUwnÎ Î 2:;9Qz? �bW �YZ[[ ? cc V HBFEFGC V��FG� )JN� �� � q � � ¥Zv _k}dlk^]Y � d^0 kcceZ^[ d_ bk/ e V m_ U 429QQR;5< z 27 :o Q >:o �5:Q45�:;25�6 ©246R©;RQ ©Q� T257 Q4Q59Q« ;5 T2=S 3:Q4 Î Q:Ë24ªz �5R ­Q6Q92==35;9�:;25z Î Q:Ë24ª;5< @W k. �BBaD ? }]e V H` ?� e[Z}dZY ? cc V �FaCE �F~�V

Page 144: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

¸¹¸º¹»¼½¾¿À¹Á �FC��F �� )NII"## � - � 8n° Ö n 8359:;25�6 n5�6�z;z �5R ° Qz;<5 � Q:o2R262<�V �0g ^0Z[d[ ? b]/ci^d_l �kv]Ykf^]Y.? �_d}ZY[d^. ]j � Z_^ k^ bk_^ZYviY.? Ak_ikY. HGG �V��FH� M�#�JK � ) �� "( M#�("! � � � T2=S 3:Q4 Í4�S o;9z Ö P�z:Q= �5R 9259QS :zV �ggd[]_f¥Z[eZ.? �B`~ V��FF� M�N!� � � � ® :3RQ RQz = 2RÛ6Qz R  QÌ |93:;25 RQz 6�5< �< Qz 7 259:;255 Q6z Q: ;=S |4�:;7 z Ö nSS 6;9�:;25 Ê 35|¯�63�:Q34 P9o Q= QV X0Ä[Z g �i_d}ZY[d^¦ ? �_d}ZY[d^¦ �kYd[ a ? Ak_}dZY V �BBB V��Fp� M&x�"� � � � Ú Q6S ® z: 35 w ;zS U �4QzzQ3Ì V X0Ä[Z g �i_d}ZY[d^¦ ? i_d}ZY[d^¦ gZ X]ie]i[Z V��FC� M"!!�KJ � � � êQ4z 35Q S 42< 4�== �:;25 7 259:;255Q6 6Q S 4�:;9��6QV W ¦/]dYZ g �0kvded^k^d]_ Õ gdYdlZY ekYZh0ZYh0Z ? i_d}ZY[d^¦ gZ Ô dhZ ? HGGG V��Fa� M"!!�KJ � � �� "( � "�I � % �

1 + 1 = 1� k_ ]c^d/ d� d_l bk/ e h]/cdeZY V m_ n T� P�ÍUwnÎ ©24ªzo2S25 �w �5R ;:z nSS 6;9�:;25z @�Yek_g] @{e]Ydgk ? ��� D ? Aid_ �BBp D ? �bW �mu���Ô ? mÔ�m� �� HHaC ?cc V �G �E ���V��F~� M"!!�KJ � � �� "( � "�I � % � \ dle]] � k c ]Y^kveZ k_g ]c^d/ d� d_l h]/cdeZY j]Y [^Ydh^ ji_h^d]_ke ek_liklZ[ Vm_ þ5R P :�:;9 n5�6�z;z P�=S2z;3= @uek[l]� ? �h]^ek_g ? �Zc^Z/vYZ V �BBCD ? �Zh^iYZ Ô]^Z[ ]_ b]/ci^ZY�hdZ_hZ ? cc V FaaEF` �V��F`� M�"�"# � s � T�¬�n 835R�= Q5:�6z �5R U 42<4�==;5< V A]0_ ¥ deZ. � �]_[ ? �BBa V��FB� M��KJ#"I � s � bkehie [^k^d¤iZ gZ[ kccedhk^d]_[ gZ / ]gieZ[ ckYk/ ¦^Y¦[ V m_ 12345|Qz 84�592S o25Qz RQzw�5< �< Qz nSS 6;9�:;7 z @HGGFD ? m_Ydk V��pG� M��&&x�� � % � U 4�:;Ç3Q RQ Óή ­ Q: T" ? �[^ Zg V � ��Zdee.? Aid_ HGGF V��p �� MJ�J�, � � í �� L"K�"!IJK � q �� "( JK¨�, � � � W ZYhiY. � k_ ZØ hdZ_^ ciYZe. gZhekYk^d}Z e]ldhcY]lYk// d_l ek_liklZ V m_ n3z:4�6;�5 T2=S 3:Q4 P 9;Q59Q T257 Q4Q59Q @�BBCD V��pH� MJK, J!�J!�(�JK V b]//i_ki^. cekhZ ? �BB~ V �ñ åñÞ æð åáöãà� ñ V��pF� MJ!�� � � �� �J!&!"((" � � �� '!,�JJ � � �� "( %�#�#I � à � �5;:;�:;25 Ê 6� S 42<4�== �:;25 S�4 ©24RQ: ®Ì 9Q6 Ö U 4;59;S Qz Q: = �942zV m_^ZY_k^d]_ke X0]/ []_ �ived[0d_l ? �BB` V��pp� M%t V �^k_gkYg c ZYj]Y/ k_hZ Z}keik^d]_ h]Yc ]Yk^d]_ ? �BBaEHGGF V ððð åñÞôá åöèÿà V��pC� M(""#" � O � �v� Zh^[ 0k}Z _]^ jkdeZg ? Ô]}Z/vYZ V HGGH V ÜÝÝÞ ßààððð å�èôâã ñöçÿñ åáöãà��òôáÝ ñ�â�ôöÝâæäô�âèè åÜÝãä V��pa� M,�" � - � m�$ � �³^Z_gd_l ^0Z VÔ�X h]//]_ m� j]Y ji_h^d]_ke ek_liklZ d_^ZY]c ZYkvded^.V ® 6Q9:425;9Î 2:Qz ;5 ­oQ24Q:;9�6 T2=S 3:Q4 P 9;Q5 9Q >µ? � @HGG �D V��p~� ��!��( � � - �� $"" � % �� "( �&x�!,� � � � Ô] k[[Z/ve. YZ¤idYZg � b]/cded_l [^k_gkYg W� ^] b V n T�wQ::Q4z 25 U 42< 4�== ;5< w�5<3�< Qz �5R P�z:Q= z ¡? H @Ai_Z �BBHD ? �a �E �~~ V��p`� �x" sJ�K( ��Ir qJ!&" JK J��N(�K� N!!�&N#� V b]/ci^d_l biYYdhiek HGG � b]/ci^ZY �hdZ_hZ ?{ d_ke � Zc ]Y^ V XZh0 V YZc V? m��� b]/ci^ZY �]hdZ^. k_g �[[] hdk^Zg j]Y b]/ci^d_l W kh0d_ZY. ? £ ¦hZ/vYZ VHGG �V��pB� �xJ��IJK � M � ï dl0ZYf]YgZY ü �]e./ ]Yc0dh % �Zi[kveZ V ððð åáñ åó� á åâá åó�àÞó� ñà���&à��' ? W kd�BB~ V��CG� �J#��&x � � �� "( ���"# � � � � � � £ZvillZY j]Y �^k_gkYg W� V 12345�6 27 8359:;25�6 U 42< 4�== ;5< ?H @�BBCD V��C �� �J#��&x � � � % � XklfjYZZ lkYvklZ h]eeZh^d]_ i[d_l Z³cedhd^ ^.c Z ckYk/ Z^ZY[ V m_ T257 Q4Q59Q 25 w ;zS�5R 8359:;25�6 U 42<4�== ;5< @Aid_ �BBp D ? cc V �E �H V��CH� y##��K � s � - � ® 6Q= Q5:z 27 �w U 42<4�== ;5< V �YZ_^dhZ ï kee ? �BBF V��CF� yK�("� M(�("I -"��!("�"K( J -" "KI" V ­oQ U 42<4�== ;5< w�5<3�< Q nR� ¬Q7 Q4Q59Q � �53�6V�cYd_lZYf×ZYekl ? �B`G V��Cp� ���#"! � % � ¥ 0. Ô] �_Z �[Z[ {i_h^d]_ke �k_liklZ[ V P� ÍUwnÎ Î 2:;9Qz Ð @�](^ V �BB`D ? HF V

Page 145: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�Fa ¸¹¸º¹»¼½¾¿À¹Á��CC� ���#"! � % � �d��k V m_ U 4;59;S 6Qz 25 U 42<4�== �:;25< w�5<3�< Qz @HGGGD V��Ca� � "�I � % �� ��JK(" � � � � �� $�� �##" � � �� ��NK, � � �� "( MN�!" � � � X0Z b�W� YZjZYZ_hZ / k_ike VXZh0 V � Zc V �H �? mÔ� m� ? �Zc^Z/vYZ V �BBG V��C~� � "�I � % �� "( $"!J, � ú � wQ w�5< �< Q T�= 6V m_^ZY�gd^d]_[ ? �BBF V m�\Ô Hf~HBafGpBFfa V��C`� � �#IJK � % � ) � �_dcY] hZ[[]Y lkYvklZ h]eeZh^d]_ ^Zh0_d¤iZ[ V m_ �5:Q45�:;25�6 ©24ªzo2S 25 � Q= 24�� �5�< Q= Q5: @�Zc^Z/vYZ V �BBHD ? �cYd_lZYf×ZYekl ? �g V? cc V �EpH V��CB� � !��x( � � � ± � �]e./ ]Yc0d[/ j]Y d/c ZYk^d}Z ek_liklZ[ � d^0]i^ d/c ZYk^d}Z ^.c Z[ V XZh0 V �Zc V X�BFfHGG ? � dhZ �_d}ZY[d^. £Zc^ V ]j b]/ci^ZY �hdZ_hZ ? jZv �BBF V��aG� ú )Ã�"K O!JN� V ° T® ¡Ó¡ Ö ¬Q= 2:Q U 429QR34Q T�6 6? �BBp V ÜÝÝÞ ßààððð åöÞôçÿèöóÞ åöèÿ V��a �� íNrJ¨ Ir� � s � 1�¯� n©­ ¬Q7 Q4Q5 9QV � �� Zdee.? �BB~ V ]_fed_Z }ZY[d]_ � ððð åöèôæääù åáöãàáâÝâäöÿàòâ�âðÝà�öö�àæç�ô� åÜÝã ä V

Page 146: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

*�� +� ,�- .�/0�-

�V� XZ[^[ [d/ceZ[ gZ bZW� [iY W m�� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �B�VH XZ[^[ [d/ceZ[ gZ bZW� [iY ����b V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �B�VF XZ[^[ k}k_h¦[ gZ bZW� [iY W m�� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HG�Vp XZ[^ _iheZdh [iY ����b V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HG�VC Ô]i}Zki³ ^Z[^[ gZ bZW� [iY �Z_^di/ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HG�Va ÔiheZdh [iY �Z_^di/ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V H ��V~ b]/cdek^d]_ Z^ Z³¦hi^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HF�V` \Yk_h0Z/ Z_^ gZ � �b�W d� [iY eZ h]/cdek^ZiY �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V Hp�VB XZ[^[ gZ c ZYj]Y/ k_hZ @^Z/c[ Y¦Ze Z_ [Zh]_gZ[D V V V V V V V V V V V V V V V V V V V V V V V V V V V H~H V� £¦hekYk^d]_[ gZ ^.c Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FFH VH £¦hekYk^d]_[ le]vkeZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FFH VF �³cYZ[[d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FpH Vp £¦hekYk^d]_ e] hkeZ gZ j]_h^d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FBH VC £¦�_d^d]_ g �i_ ^.c Z ckYk/ ¦^Y¦ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V pGH Va £¦�_d^d]_ gZ ^.c Z[ ckYk/ ¦^Y¦[ � cY]gid^ Z^ []// Z V V V V V V V V V V V V V V V V V V V V V V V V p �H V~ W ¦^0]gZ[ k� ]i^¦Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ppH V` �Y¦gdhk^[ [iY eZ[ YZek^d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V pCH VB m_[^Yih^d]_[ gZ h]_^Ykd_^Z[ gZ ^.c Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V paH V�G XY]d[ lYkc0Z[ g �0¦Yd^klZ c ][[dv eZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V paH V�� �³Z/ceZ k}Zh cei[dZiY[ _d}Zki³ g �0¦Yd^klZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V p`H V�H �³Z/ceZ gZ cYZ/ dZY[ _d}Zki³ g �i_Z 0d¦YkYh0dZ V V V V V V V V V V V V V V V V V V V V V V V V V V V pBH V�F �³Z/ceZ g �0¦Yd^klZ /ie^dc eZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V CGH V�p 1iZe¤iZ[ ^Z[^[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aFF V� �ZcY¦[Z_^k^d]_[ gZ ek / 2/Z g]__¦Z b Z_ W� V V V V V V V V V V V V V V V V V V V V V V V V V V V a~F VH b]//i_dhk^d]_[ Z_^YZ �v� Zh^d}Z bk/ e Z^ b V V V V V V V V V V V V V V V V V V V V V V V V V V V V a~F VF �^Yih^iYZ Z_ [Zh^d]_ Z^ ^kveZ gZ[ / k^dÄYZ[ gZ e �Z³¦hi^kveZ �v� Zh^d}Z bk/ e V V V V V V V V V V V a`F Vp �cc Ze g �i_Z jZY/ Z^iYZ �v� Zh^d}Z bk/ e Z_ b ¢ i^ded[k^d]_ gZ e �]c^d]_ föóÞÝóÝ �ö�ò V V V V V V V a`F VC {dh0dZY b Z_lZ_gY¦ ckY �öóÝÞóÝ �ö�ò ¤id [ZYk ed¦ ki h]gZ b Z³ d[^k_^ V V V V V V V V V V V V V V V a`F Va m_^ZYjkhZ Z^ cY]lYk//Z bZW� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~GF V~ �Z :2S 6Q¯Q6 / k_dcie¦ gZcid[ i_ cY]lYk//Z �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V ~HF V` {]_h^d]__Z/ Z_^ gZ e �kcc Ze gZ cYd/ d^d}Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~pF VB uYk// kdYZ gZ e �dge V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~aF V�G �Z[ d_¦}d^kveZ[ hek[[Z[ 3öæçÝ Z^ 3öæçÝ÷öäöèô V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~~F V�� �Zek^d]_[ Z_^YZ hek[[Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~`F V�H �³¦hi^d]_ g �i_ cY]lYk//Z Ak}kf� �bk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~`F V�F b]/cdek^d]_ gZ[ g¦hekYk^d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~BF V�p £¦^kde g �i_ kcc Ze Õ gd[cek. [iY i_ ÞöæçÝøáöäöèôøã æ�Ýô V V V V V V V V V V V V V V V V V V V V V `G

�F~

Page 147: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�F` 4¾¸ºÁ 5Á6 7 ¹¼8½Á6p V� bkc^iYZ g �i_Z [Z[[d]_ �hedc[Z @W kh��$ D V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `Cp VH bkc^iYZ g �i_Z [Z[[d]_ �hedc[Z @¥ d_g]� [D V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `ap VF bkc^iYZ g �i_Z [Z[[d]_ �hedc[Z @¥ d_g]� [D V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `~p Vp �[ckhZ[ gZ[ }keZiY[ ? gZ g¦cekhZ/ Z_^ Z^ / dYY]dY V V V V V V V V V V V V V V V V V V V V V V V V V V `Bp VC �k[[Z/veZ/ Z_^ gZ e �Z[ckhZ gZ g¦cekhZ/ Z_^ Z^ gZ e �Z[ckhZ gZ[ ^.c Z[ V V V V V V V V V V V V V V V BGp Va �_Z }keZiY bk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V BGp V~ 9 ^k^ gi ^k[ k}k_^ ub V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V B �p V` �cc Ze gZ XYZk^ @kD V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V B �p VB Xk[ kcYÄ[ e �¦^kc Z � V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V B �p V�G Xk[ kcYÄ[ e �¦^kc Z H V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V BHp V�� Xk[ kcYÄ[ e �¦^kc Z F V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V BHp V�H Xk[ kcYÄ[ e �¦^kc Z p V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V BFp V�F ×keZiY bk/ e [iY}d}k_^Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Bpp V�p XZ[^[ gZ vk[Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Bpa V� �^]_ZïZ_lZ @$ f� d_g]� D V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Fa VH b]_}ZY^d[[ZiY {Yk_h[f�iY][ @$ f� d_g]� D V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��pa VF m_^ZYjkhZ ×iZ Z^ b]_^Y: eZiY c ]iY �£}d V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ca Vp bkc^iYZ g �¦hYk_ gZ ò;� æ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��aa VC �h0¦/ k g �Z³¦hi^d]_ g �i_ S 63< ;5 V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��~a Va � �kccedhk^d]_ b]e]Y�0ZZe []i[ W ]� deek @$ f� d_g]� D V V V V V V V V V V V V V V V V V V V V V V V V ��`a V~ � �kccedhk^d]_ £Z/ d_ZY []i[ {dYZ\dYg @¥ d_g]� [D V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ba V` �]Y^ @b]h]kD V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �HGa VB b]/ckYkd[]_ g¦c Z_gk_^Z gZ[ [c ¦hd�hd^¦[ gZ hie^iYZ V V V V V V V V V V V V V V V V V V V V V V V V �H �

Page 148: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

*<=+� ,�- > <?@A0�-

BCDEFGHIJKJL MN OPOIQMOPOEFL MMMREFIJSTQFMJE U�k_lklZ[ kel]Yd^0/ d¤iZ[ [¦¤iZ_^dZe[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��k_lklZ[ j]_h^d]__Ze[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Cb0]d³ gZ b�W� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V B�Y¦[Z_^k^d]_ gZ[ ^Yk}ki³ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GU VJPKMWDFMJE SO XY UZ�V� XZh0_d¤iZ[ gZ h]/cdek^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �p�VH b]/cdek^d]_ }ZY[ b � bZW� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �a�VH V� £Z[hYdc^d]_ l¦_¦YkeZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �a�VH VH 9}]ei^d]_ gZ[ c ZYj]Y/ k_hZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �`�VF b]/cdek^d]_ }ZY[ VÔ�X � � �b�W d� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V H ��VF V� �ek^Zfj]Y/ Z VÔ�X V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HH�VF VH b]/cdek^ZiY � �b�W d� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Hp�VF VF �YZ/ dZY[ Y¦[ie^k^[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Ha�VF Vp XYk}ki³ h]__Z³Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V H`�VF VC XYk}ki³ ji^iY[ [iY � �b�W d� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V H`�Vp b]_hei[d]_ � ^.c Z[ Õ ek h]/cdek^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V HB[ \]FOELMJEL OF QJPKMWDFMJE COIL X Y ZUH V� [h]hk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FHH V�V� £Z[hYdc^d]_ gi ek_lklZ �h]e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FHH V�VH �Y]^]^.c Z ñáöáâãä V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V FCH V�VF �³^Z_[d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V F~H V�Vp �³Z/ceZ h]/ceZ^ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V p �H VH �³^Z_[d]_ ]v� Z^ � áöáâ�ãä V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V pHH VH V� ï¦Yd^klZ Z^ []i[f^.cklZ Z_ �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V V V V V V pHH VH VH �³^Z_[d]_ áöáâ�ãä V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ppH VH VF �ZY[d[^k_hZ Z_ áöáâ�ãä V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V CHH VF �³^Z_[d]_ ckYkeeÄeZ � _] hj V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V CCH VF V� � �Z³^Z_[d]_ {edl0^ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V CaH VF VH Ô]i}ZeeZ d/cek_^k^d]_ � �v� Zh^d}Z bk/ e {edl0^ V V V V V V V V V V V V V V V V V V V V V V C`H VF VF �ZYj]Y/ k_hZ[ Z^ gd[hi[[d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aHH Vp b]_hei[d]_ � Z³^Z_[d]_[ Z^ ^.cklZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ap

�FB

Page 149: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

�pG 4¾¸ºÁ 5Á6 ^¾4¹_½Á6Z REFOIJK `IDaMWMF` bcF V� ×keZiY ? h]gZ Z^ d_^ZYjkhZ k}Zh b V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aaF V�V� �_hkc[iek^d]_ gZ[ }keZiY[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aaF V�VH �cc Ze ki h]gZ Z³^ZY_Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aaF V�VF m_^ZYjkhZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V aBF VH X]ceZ}Ze Z/vkY¤i¦ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~ �F VH V� W k_dciek^d]_ gi :2S 6Q¯Q6 V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~HF VH VH bY¦k^d]_ g �i_Z vdved]^0ĤiZ :2S 6Q¯Q6 V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~FF VH VF �³Z/ceZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~pF VF m£� c ]iY Ak}k Z^ �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~CF VF V� £Z[hYdc^d]_ gZ e �m£� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~aF VF VH m/cek_^k^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ~~F Vp b]_hei[d]_ � ¦}]ei^d]_ gZ[ d_^ZYjkhZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `Hd \EC MIJEEOPOEFL SO S`COWJKK OPOEF eZp V� �_}dY]__Z/ Z_^ [^k_gkYg c ]iY �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V `pp VH �°® c]Y^kveZ[ � �hedc[Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `pp VH V� �Yh0d^Zh^iYZ g ��hedc[Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `pp VH VH U 63< ;5 c ]iY �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `Cp VH VF �Z/ kY¤iZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `~p VF X.c Z[ Õ e �Z³¦hi^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `~p VF V� W ]gÄeZ[ Z^ ^Zh0_d¤iZ[ g �d/cek_^k^d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V ``p VF VH �^ded[k^d]_ gi ^k[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V `Bp VF VF X.c Z[ [k_[ Z[ckhZ gZ ^.c Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V BGp VF Vp �Zh]_[^Yih^d]_ gZ ^.c Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Bpp Vp b]_hei[d]_ � Z_}dY]__Z/ Z_^ c ]Y^kveZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Bac \ELOMfEOPOEF ggC V� �_[Zdl_ZY W� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GGC V�V� £i λ

fhkehie ki³ ek_lklZ[ j]_h^d]__Ze[ V V V V V V V V V V V V V V V V V V V V V V V V V V V �GGC V�VH X.c Z[ Z^ [^Yih^iYZ[ gZ g]__¦Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �G �C V�VF W ]gieZ[ Z^ �v� Z^[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GHC V�Vp W� h]//Z cYZ/ dZY ek_lklZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GHC VH W� h]//Z ek_lklZ [icc ]Y^ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GpC VH V� £]/ kd_Z[ ]Å W� [ �d_^ÄlYZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GpC VH VH 1ik_g W� k v Z[]d_ g �d_^¦lYZY g �ki^YZ[ ^Ykd^[ V V V V V V V V V V V V V V V V V V V V V V V �GaC VH VF �Å W� kcc]Y^Z c Zi V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �G~C VF W� c]iY eZ[ ki^YZ[ gd[hdc ed_Z[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �G~C Vp W� Z_ j]Y/ k^d]_ c ZY/ k_Z_^Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �G`C VC W� Z^ eZ[ X mb� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �GBC Va b]_hei[d]_ � Z^ eZ[ ]v� Z^[ Æ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Gb h MiTLMJE S jDKK WMQDFMJEL UUUa V� m_^ZYjkhZ lYkc0d¤iZ c ]Y^kveZ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ha V�V� \dved]^0ĤiZ ÿèâÞÜ æáñ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Fa V�VH �_Z }d[d]__Zi[Z �� æ � �£}d V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��pa VH U 63< ;5 ¥Zv c ]iY gZ[ kccedhk^d]_[ b�W� V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ca VH V� £¦}Ze]cc Z/ Z_^ g �i_ S 63< ;5 c ]iY ÔZ^[hkc Z V V V V V V V V V V V V V V V V V V V V V V V V V ��aa VH VH U 63< ;5 c ]iY eZ[ cY]lYk//Z[ �v� Zh^d}Z bk/ e V V V V V V V V V V V V V V V V V V V V V V V V ��~

Page 150: PRATIQUE DES LANGAGES FONCTIONNELS TYPES

4¾¸ºÁ 5Á6 ^¾4¹_½Á6 �p �a VH VF b0]d³ g �d/cek_^k^d]_ Z^ ed/ d^k^d]_[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��`a VF �.[^Ä/ Z[ [c ¦hd�¤iZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ba VF V� �ccedhk^d]_[ W kh��$ fb]h]k V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V ��Ba VF VH �ccedhk^d]_[ ¥ d_g]� [ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �H �a Vp b]_hei[d]_ � c ]iY i_Z / ZdeeZiYZ gd�i[d]_ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �H �

VJEQWTLMJE U[Z�¦c ]_[Z[ ki³ hYd^d¤iZ[ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �HF�_Z h]0kvd^k^d]_ k__]_h¦Z V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V �Hak MaWMJfIDKlMO U[gmDaWO SOL nfTIOL UZomDaWO SOL PDFMpIOL UZg

Page 151: PRATIQUE DES LANGAGES FONCTIONNELS TYPES