a gentle introduction to haskell 98 paul hudak yale university

64

Upload: others

Post on 10-Feb-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ����������� ���������������������������! "#���$�&%#'

(*),+�-/.�+102)435�)4-7698�:�;=<>6@?BAC;=D$E

FG6@H2),?IDKJL6M:NDPO,QSRTO>JUH�+�DK6@?�VXWM;76@:1WM6

Y,O>Z1:[(!6\DK6M?CABO>:5�)4-7698�:�;=<>6@?BAC;=D$E

FG6@H2),?IDKJL6M:NDPO,Q#RTO,JUH1+DK6M?]VXWM;76@:1WM6Y,O>AB6@H1Z^.`_�a�),AB6@-

8�:�;=<>6@?BAC;=D$EbO,QSRc),-=;=QdO>?C:1;e)fgO>APh�-e)4JUO>Aci�)4DB;7O>:2)4-jf/),klO>?K)4DBO>?CE

m W@DKO,k�6@?Mnjoqp,p>p

r*sqt,u,vIwyx{z4|~}�����q�q�9�j�q�����T����� ���� s{z�� ��� | � vI�$s{� � � �L� s{� � tz&� � � ������ vI�9w���wys{��w���z � v ��� u�xqv � ��| ������� v ��� s � } z � vx �q� |$s � ��u�t � vC�$s{��s � | � w���w��Nx � } sqt,u�s �U�$���T� �4| �y�

  ��|$vs ��� } |w�s{�~|$s �T� � �q������¡�¢ |z �¤£l�K¥ |C¦ � |$s �N���q� w��~|z �§£l�K¥ |`¨�w�|zNs � |9v � �|$vIw } |wys{� � w�� } ����� w���x§¨�wy|zNs � |� w��`wy| � |wys{�©|z � vIwyx{z4|��|$s � � �q� } sqt4u � �ªs � w � u � � � vIx �q� t �N�X� w��z ��� w��$|$vIw �� | �q� � �N�X� w } � �X� �q�,� � �« sqv�� ����� } sqtw � �s � |z �T£l�K¥ | �N� � � |$s�t � vI�9w�|/t � vI�$s{���¬|$s�¨�z�s{�­|z �c£l�K¥ |Sw�� �e� vI�Xw��z ��� |$s � s��s � � �N�>®$� } |¬|$s�|z ��� s ��� s@¨�w��Nx} s{� � w�|wys{�2¯ £ z �P� � s\° � } sqt4u,vIwyx{z4|#�Nsq|w } �]� � � |z�w��St � vI�9w��I�wys{�©�Nsq|w } � �z �q���1��� w�� } �����N��� w�� �q��� } sqtXw � ��sqv� �N� �$| � ��|w �q� t�sqvI|wys{���Ss � |z �]£��K¥ |�±

² ³�´cµ�¶2·P¸9¹Gº�µ2»·�´

¼ � vGt � vt1s{� � w��[¨�vIwy|w��Nx§|z�w���| � |$sqvCw �q� w��G�Nsq|ª|$sb| ��� } z�t�vsqxqv � �`�9w��Nx � ��sqv � ° � �½|$s¾| ��� } z �7� � } |wys{� �q�t�vsqxqv � �9�9w��NxN±T¿ � |z � v � w�|Tw��Tw��4| � � �N��� |$sÀ� � v° �ª� � � � � tXt �y� � � �4|#|$sÀ|z �G��� � �q����� ¿ � t1sqv|GÁ  à � ¨�zXw } z§w��sq|z � v¨�w�� �!� v � |z � v �N� ��� � | � } z��Xw } �q���K¥ t1s{�wy|wys{��±j¼ � v�xqs �q� w���|$sTt�vs@°,w ���¬� x � �4| �y� w��4|$vs �X� } |wys{��|$s ��� � �q������ sqv#�$s{� � s{� � ¨�zNsGz � � �K¥ t � vIw � � } � ¨�wy|z � | �y��� �$|Ss{� � sq|z � v ��� ��x ��� x �q� t�v ���7� v � �X� u ���e� � } |wys{� �q����� �Nx ��� x �¢7� ° � �Àw � s{� � u � � �$�q� �ªs{�$|ÅÄ �e� � } |wys{� �q��¡]��� �Nx �X� x � � � } z � �SÆUÇUsqv�È } z � � � ¦C±   � |z � v ���q�N� v*¨�w��Iz � �g|$s �y��� vI��ªsqv �À� � s � |]|z �`�e� � } |wys{� �q� t�vsqxqv � �`�9w��NxL�|Éu �y�q� ¨ � z�wyx{z � uUv � } s{�9� � � �ËÊ wyv �2Ì �]| �K¥ |`ÍCÎXÏeÐ$Ñ�Ò Ó�Ô�ÏeÕÖÑ Î×ÏdÑØ Ó>ÎÔ\ÏeÕeÑqÎÙ ÚXÛSÐ$ÑÜqÐ$Ù ÝGÝGÕ=Î,Ü�Á � Ã1sqv�Þ � °,w �qÌ ��ßTÎ�ÍCÎXÏeÐ$Ñ�Ò Ó�Ô�ÏeÕÖÑ ÎbÏdÑ Ø Ó>ÎÔ\ÏeÕeÑqÎÙ ÚÛSÐ$ÑÜ{ÐÅÙ ÝGÝGÕ7Î4Ü�à�áMâBÏÉãKÝ�âÀälâBÕ=Î,Üå ÙMâIæ{ãKÚ7Ú*Áèç@Ãd±[��sqv �§� � ���7�X� � � v° � ués ���7� � } |wys{� �q� t�vsqxqv � �9�`w��Nx ��� �Nx ��� x � � � � � | � } z���w�ê �N� � � w�� } ����� w���x�$s{� � s � |z ����� �Nx ��� x �]��� �wyx{�Àt�vIw�� } wyt �y� � � � ��� w�� ��� � �q�����Ö� � ��� Áèë Ãd±

£ z �]��� � �q�����l��� ��x ��� x � z � � � °qs � ° ��� �wyx{��wyì } � ��| � u©�w�� } � wy|� � w�v|zíw�� ���qî{ï ± £ z�w��S| � |$sqvIw �q�l�N���q� �#¨�wy|z�T� � �q�����/�qî ±9¼ ���N� vT° � vI�wys{�X�cs � |z �9��� ��x ��� x �ª� v � �Ns\¨ðs � �$s �y� | �qñ��T� � �q�����g� � � vI� � v �ª� � } s � v � x ��� |$s � � ��T� � �q�������qî ± £ z � v �&� v �&�q� �s¾� � ��u �K¥ | � ���wys{�X�G|$s ��� � �q�������qî |z � |�z � ° �U����� �^¨�w �N��� uéw��ªt �y� � � �4| ��� ±£ z � � �P� v � �Nsq|#u � | �ª� sqvC� �q� t � v|#s � |z �]�T� � �q�����l��� �Nx ��� x �]� � �í� v � �Nsq| } s@° � v ��� w��À|z�w��S| � |$sqvCw �q� ±

¼ � vTx � � � v �q� �$|$v � | � xqu � sqvPw��4|$vs ��� } w���x ��� �Nx ��� x �ª�7��� | � v � ��w���|z�w���¯��ªsq|w�° � | � |z � w �N���>����� ìX� � �$s{� �| � vI�9� � x{wy° � �s{� �#�K¥N� �ªt �y� � �,� � � |z � �9t�s{w���|g|$sP|z � ¿ � t1sqv| � sqv �N� | � w � ��±�ò � � � xqx � �| � zNs@¨ � ° � v � |z � |!|z �v ���q�N� v } s{�9t �y� | ��� u�wyx{�Nsqv � |z �#�N� | � w � � � ��|w � |z �ªó ã�ÎXÏeÚ�ã�ÍCÎXÏeÐÅÑ\Ò Ó�Ô�ÏeÕÖÑ Î�z � � ����� � } s{�9t �y� | ��� u�v ���q� ±/¼c�G|z �

Page 2: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç � ������������ ������������������ ������ �������!"��

sq|z � vPz � � �2�2��� � �q�����ÖÌ �PÈ,| � � ��� v �¤� v �������N�À¢ w�� � tXt � � � w ¥&� s � |z � ¿ � t1sqv| � � � |z � �$| � � ��� v �¤� w � v � vIw � �¢7� s � � � w��L|z � Ç�w � v � vuí¿ � t�sqvI|GÁ$#@Ã7¦ } s{�4| � w�� � sq|�Ts �¬� � ���e�����K¥>� �ªt �y� ��s �!��� � �q����� } s �N�qñ ¨ ��� � } s � v � x �9�|zNsqvs � x{zÀv ���q� w��Nx�s{� } � |z�w��*| � |$sqvCw �q� w�� } s{�ªt �y� | ��� ± £ z�w��!¨�w ��� �Nsq|Ss{� � u9x{wy° � |z � v ���q�N� v ���=������� sqv�¨�z � |v ���q����� � �q����� } s �N��� s,s � � � w �q�q��X� |�¨�w �����q� �$s �e� �9w � w � vIw&% � z � vT¨�wy|z ��� � �q�����ÖÌ �c�$| � � ��� v � � � |Ts � t�v ���N� ìX� ����e� � } |wys{��� � � � |Éu,t � ��±

�jw�� �q��� u � |z �U�T� � �q����� ¨ ��� �wy| �q��')(*(,+.-0/1/2'�3)465871919;:"<,=1>� z � � � ¨ ���q� |z×s � w�� � sqvI� � |wys{� � � s � |©|z ��T� � �q��������� ��x ��� x �]� � � w�|��w��ªt �y� � � ��| � |wys{�X��±

Á ò � z � ° �T�q� �s�| � �q� �©|z � } s � vI� � s � �Nsq| ��� u>w��Nx�s � | � t �y� |zNsqv � s ���y�K¥ w } �q� �$u,�4| �M¥ v ����� � � |*|z � s � |� � |�±¿ � |z � v � ¨ � w���|$vIs ��� } � |z � � w�� } v � � � �4| �q��� u � ��s � v �K¥>� �ªt �y� � �N� � � � �2�� � �L� � } � s{� � |z � � w�� � v � } �q� |� �� �c¨�wy|zU|z�w��Tt � v � xqv � tXz2± £ zXw���w��Tw��U�$| � v � } s{�4|$v � �$|�|$sí|z � sqvx � ��w?% � |wys{�§s � |z � ¿ � t1sqv| ���q� |zNs � x{z§|z �¿ � t1sqv|cv � � � w����c|z �9�q� |z�sqvIwy| � |wy° � �$s � v } �ª� sqv �N� | � w � � ¢ v ���7� v � � } � ��� � } z � � �A@ ç,± ��¡ v ���7� vP|$s&� � } |wys{�X�Pw��|z � ¿ � t1sqv|C¦C± Ã

�T� � �q����� w�� � ÏeáCB�ãEDBÓ,ÚXt�vsqxqv � �9�`w��Nx ��� �Nx �X� x � ¯GFÀ| u4t � � � v � t � v° � �wy° �q�� � � |z � � � ¨ } s{� � vTw�� �1� �$|�sIH�1� } s{�9w��Nx�¨ ������� ¨ � v � s � |z �#�e����� t1s\¨ � v � � � } s{�ªt �y�K¥ wy|Éu�s �2��� � �q�����ÖÌ �g| u4t � �$u>�$| � � � vs{�­|z � s � |� � |�±/��sqv|zNs{� � ¨�zNs{� � s{� � u �K¥ t � vIw � � } � w��*¨�wy|zÀv ����� |w�° ��� u �$� �4|Éu,t ���7�X��¡���� �Nx ��� x � �#� � } z � � ��� v �d�>£ } �Ö� sqv�È } z � � �q�|z�w��©� � u �1�§�Ë� w&J } ��� | �q�M®� �$|� � ��| ñ�� sqvÀ|zNs{� �¤�7� �`w � w � v�¨�wy|z �{� ° �>� r � ÆLs �X�����>� sqv � ° � � ÆUÇ � |z ��q�M®� �$|� � �4|��z�s �����í�1�P��� �w � v �X� |��$|w ��� ��sq|�w����Iwyx{��wyì } � �4| � �w�� } �]��� � �q�����ÖÌ �#| u4t � �$u,�| � � w�� � wGH � v � ��| � � ��$s{� � ¨�z � |lvIw } z � v�|z � �]�9s{�$|�±   � � ��u } � � �q��� | u4t ���e��� t�vsqxqv � �9�`w��Nx ¡ w��lt � v|�s � |z �!�T� � �q����� t�vsqxqv � �`�9w��Nx�K¥ t � vCw � � } �q��� � � } � �X�Nsq| �1��� °qs{w �N��� ±

K LNMPOI¹RQ;S�TVUXWZY[Q;S�T\M#´G¸^] µ`_RQ/¶ba ·]·P¸9»cQ;S

Ê*� } �q� � �©��� � �q����� w�� � t � v ��� u �e� � } |wys{� �q�g��� �Nx ��� x �q�j�q��� } s{�ªt � | � |wys{��� � v ��� s{� � °>w � |z �9� ° �q����� |wys{�¾s �ãcdeBÐãBâIâBÕeÑqÎNâ ¢ �$u>�4| � } |w } | � vI�9�C¦�|$sÀu>w �����gf Ù Ú ÓXãBâ ¢e� � �|$v � } | � ��|w�|w � �T|z � |c¨ � v � x � v �b� � � ���¨ � vI�B¦C±ih/° � vu° �q���N� z � � � � � ��$s } w � | ��� ÏeáCB�ãK± ¢   ��| � wy|wy° ��� u � ¨ � } � ��|z�w�� � s � | u4t � � � ��� � |�©s � ° �q���N� ��± ¦jh ¥>� �9t �y� �s �T�K¥ t�v � ��wys{���ªw�� } �����N�À� |$s{�9w } ° �q����� �ª� � } z � �9|z � w��4| � x � vlk � |z � } z � v � } | � vnm 3 m �*� � � |z �í�7� � } |wys{�o,prq*stp1u�v ��� �#¨ �����2� ���$|$v � } | � v ��� ° �q����� �#� � } z � ��|z �]� w��$|xw vzyC{�yc|,} � � � |z � t � wyv�~�m��m y0��� ±

��� �$| � � �K¥ tXv � ��wys{�X� �N� ��sq| � ° �q����� � � |Éu,t �c�K¥ t�v � ��Iwys{��� � v � �$u>��| � } |w } | � vC�9�S|z � | �N� �Nsq| � | u4t � ° �q���N� �¢ sqv ®$� �|]Ïeá�BNãBâ¦C±�h ¥N� �ªt �y� �#s � |Éu,t ���K¥ tXv � ��wys{�X�#w�� } ���X�N� |z ��� |$s{�9w } |Éu,t � �i��� (�7*>17,=§¢ w��NìX��wy| � ÄdtXv � } w��wys{�w��4| � x � vI�C¦ ����'�3�=U¢ } z � v � } | � vI�B¦ � ��� ()7,>�7,= q1s ��� (�7*>17,=í¢7�7� � } |wys{���S� � t�tXw��Nx���� (�7*>17,= |$s���� ()7*>17,= ¦ ��� ��¨ ������ �g|z � �$|$v � } | � v ��� | u4t � �\wC��� (�7*>�7�= } ¢ zNs{�ªsqx � � � s � � � w��$|��s � w��4| � x � vI�C¦ � � � ~ �I'�3�= y ��� (�7*>�7�= � ¢ } z � v � } | � v �w��4| � x � v�t � w�vI�C¦C±

�T������� � �q����� ° �q���N� � � v �í� ì�vI�|ÅÄ } ��� �� ¡6� |z � u�� � u �1� t � �I� ���À� � � vIx � � � �4|�!|$s �e� � } |wys{�X� � v � | � vI� ���©� �v � � �X� |� � t ��� } ��� w�� ��� | � �$|$v � } | � v � � ��� | } ± �T� � �q����� | u4t � � � s{�&|z � sq|z � v�z � � �2�X� v � Î�ÑqÏ�ì�vC�$|ÅÄ } ��� ���± £ u4t � �w�� � � � ��� ���N� � } vIw �1� ° �q���N� � �N� � � |z �P� �I�$s } w � |wys{�©s ��� ° �q���N� ¨�wy|zÀwy|�*|Éu,t � w�� } �q���y���À� ÏeáCB�Õ=Î4Ü{±��T�w��Nx�|z ��K¥N� �ªt �y� ��s � ° �q���N� � � � � |Éu,t � � � � s@° �q� ¨ � ¨#vIw�| � |Éu,tXw��Nx{� � � � s ��� s\¨���¯

k -1- ��� (�7*>�7�=m 3 m -1-x�I'�3�=� �`� -1- ��� (�7*>�7�= q1s ��� (�7*>�7�=

w vzyc{�yc|,} -1- wc��� ()7*>17,= }~�m���m y0��� -1- ~ ��'�3�= y ��� ()7*>17,= �

���������2�0�������* 6¡0¢.�`¢c£��6�"¤�¤��&¥

Page 3: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� ���������� ��������Z �������� ë

£ z �&�)-1- ¡ } � � �1� v ���q�~� z � ��|Éu,t � ± ¡� � � } |wys{����w�� �T� � �q�����g� v � ��sqvI� �q��� u �N� ìX� ���§� u � � � vIw � �cs � ã���Ó�ÙqÏeÕeÑqÎNâC±ª�Nsqv �K¥N� �ªt ���q� |z �G�7� � } |wys{�

� ��� } � � �1�P�N� ìX� ���À� u©|z � �w���x �y�c� ê ��� |w�s{�2¯� ��� � �N� u`v

� � � ê ��� |wys{�Lw�� � � �K¥N� �ªt ��� s �/� Ò�ãIÔ�ÚyÙ Ð$ÙqÏeÕeÑqÎ�± � �Nsq|z � v � w�� � s �/�N� } ��� v � |wys{�Uw�� � ÏeáCB�ã�âCÕyÜqÎ�ÙqÏeÓ>Ð$ãªÒ4ãÔ�ÚyÙ �Ð$ÙqÏeÕeÑqÎ ¢�@ ÂN±èÂN± � ¦ � ¨�wy|zÀ¨�z�w } zÀ¨ � } � � ��� } ��� v �]� � �K¥ t � w } wy|S|Éu,tXw��Nx � sqv � ���,¯� ��� -1- ��� ()7,>�7,= q1s ��� ()7,>�7,=

ò � ¨�w ��� z � ° � � � } z&�ªsqv � |$s`� � u � � s � | �e� � } |wys{� ��� ìX��wy|wys{�X�*w��LÈ � } |wys{�Lë,±�Nsqvªt ����� xqsqx{w } �q� t � vt1s{� � � � ¨�z � �[¨ � ¨�w��z¾|$sbw�� � w } � | � |z � | � � �K¥ t�v � ��Iwys{�"! F � ° �q����� | � � � sqv � v � Ä��� } � � � ¡ |$s � �Nsq|z � v �K¥ t�v � ��wys{�ísqv�° �q����� !$# � ¨ � ¨�w ��� ¨#vCwy| � ¯

! F % !&#

�Nsqv �K¥>� �ªt �y�q� �Nsq| � |z � |�¯� �`�b~ � ��� |�� % k

�T� � �q�����ÖÌ �c�$| � |w } | u4t � �$u,�| � � ��� ìX� � ��|z ��� sqvI� �q� v ����� |w�s{���z�wyt ��� | ¨ ��� �¤| u4t � � � � � ° �q���N� � ¢�@ ÂN± � ± ë{¦C±£ z � �$| � |w } | u4t � �u,�$| � � � ��� � v � �2|z � | ��� � �q����� t�vsqxqv � �9� � v � Ïeá�BNã*â�Ù"D�ã ñ |z � |�w�� � |z � |�|z � t�vIsqxqv � �9� � v�z � ��Nsq|*�9w��� � | } z ��� | u4t � �*w��9�$s{� � ¨ � uq±¬�Nsqv �K¥N� �ªt �y�q� ¨ � } � ���Nsq|!x � � � v �q��� u �q��� |$sqx � |z � vS|ɨ*s } z � v � } | � vI� ��$sÀ|z �G�K¥ t�v � ��w�s{�rm 3 m u m��m�w��cw ��� Äd|Éu,t ��� ± £ z � � � w�� �q� ° � �4| � x � s � �$| � |w } �q��� uU|Éu,t ���§��� �Nx ��� x � �Pw��T¨ ����� Ä� �Ns\¨���¯ �T��� |Éu,t ��� vvIsqvI� � v �T��� | � } | ���&� | } s{�ªtXw �y� Äd|w�� � ±�'�sq| �q���� vvsqvI� � v � } �q� x{z4| � u9|z � | u4t � �$u>�$| � � ñ� � �K¥ t�v � �I�wys{�¾� � } z � � v /�( w���| u4t � ��y�`�X� |Pwy|� � ° �q����� |wys{�é¨�w ��� v � � ��� |Pw�� � � � vvsqv � | �K¥>� } � |wys{�é|w�� � ±È,|w ���Ö� |z � | u4t � �$u>�$| � � ìX� � �S� � �4u`tXvsqxqv � � � vvsqvC� � | } s{�9tXw �y� |w�� �q�N� w � �*|z ��� � � vSw���v ��� �$s{��w��Nx � � s � |t�vsqxqv � �9� �l� � �b�q� �$sít � vI�9wy|� � } s{�ªtXw �y� v�|$s&x � � � v � | � �ªsqv �ª� J } w � �4| } s �N�U¢7� sqv �K¥>� �9t �y�q� �NsÀv � �>Äd|w�� �|Éu,t � | � x{�#sqv�| � �$|� � v � v � ê � wyv ��� ¦C±

£ z � |Éu,t � �$u>�$| � � �q� �$s � ��� � v � ��|z � | � � � v$ÄÉ� � tXt � w ��� | u4t � �Iwyx{� � | � v � � � v � } sqvv � } |�±   � �e� } | �2��� � �q�����ÖÌ �|Éu,t � �u,�$| � � w���t1s\¨ � v �7�X�/� �Ns � x{z[|$s �q��� s\¨ � ��|$s � °qs{w � ¨#vIwy|w��Nx � ��ué|Éu,t � �wyx{� � | � v � � � | �q���dñ # ¨ � � � u|z � |ª|z � | u4t � �$u>�$| � � Õ7Î�D�ãKÐCâ�|z � } sqvIv � } |9|Éu,t � � � sqv � ��±)' � ° � vI|z ���y� �� �l®��� w } wys � ��t ��� } � � � �4|ªs � | u4t ��wyx{� � | � v � �P� � } z � ��|z � |P¨ � x � ° �©� sqv � �`�Àw�� � xqs4s � w �N���>� �w�� } � | u4t � �w�x{� � | � v � � � v �`� ° � vu � H � } |w�° �� sqvI��s �j� s } � � � ��| � |w�s{� � � � z ��� t � vIw��NxGt�vIsqxqv � �9�9w���x � vIvsqvI��|$s � wyx{z�|�±

Á £ z � v ���q�N� vª¨�w ��� �Nsq| � |z � |ª¨ � z � ° � } � twy| �q� w&% ��� w �N� �4|wyì � vC�]|z � | ��� �Nsq| � �$t � } wyì } |Éu,t � � � � � } z � ���� ()7,>�7,=c� � �R��'�3�=�q�X� |j�Nsq|gw �N� �4|wyì � vI�l|z � | �N� �Nsq| � ° �q���N� � � � � } z � � � �`�,± £ z�w���w����Nsq| ®$� �$| � } s{�4° � ��|w�s{�2¯wy|/w�� � � � sqv } ���ª� u �T� � �q�����ÖÌ � �y�K¥ w } �q� �$u>��| �M¥ ±   � �e� } | � |z � } � � � s � |z � sq|z � v } z � v � } | � vI�*� � |$| � vI� � |$s,sN¯+* <1<N�*-, <��X� � � *-,., � v �]�q���2� w��$|w�� } |�w ��� ��|wyì � vI��± Ã

/+021 3547698�:;4�<>=@?BA�CEDF8+=HGJI

�T� � �q�������q� �$s¾w�� } sqvt1sqv � | � � B>Ñ Ú á ݪÑqÐ BLK4ÕeÔÀ| u4t � � � |Éu,t � �`|z � | � v �U� ��wy° � vI� �q��� u[ê ��� �4|wyì ��� w����$s{� � ¨ � us\° � v �q��� | u4t � ��± � s � u>�ªsqvtz�w } |Éu,t �9�K¥ tXv � ��wys{�X� � �� � �4|w �q��� u �N� � } vIw �1�G�e� �9w � w � �Ts � |Éu,t � ��±`�Nsqv �K¥>� �9t �y�q�¢NM 3 ¦�w 3 } w��©|z �¤�e� �9w � u½s � |Éu,t � � } s{���w��$|w��Nx[s � ��� sqv � ° � vu�|Éu,t �g3N� |z � | u4t � s ��� w��$|��s �R3 ±�Çlw��|��s �

O2Pl�RQTS�¢VUG�XW �XY�¡"�XZ�Q ���A��[�Q �������6�\[ ¡�£ � ���"��¤ ¢]Q � £0¥

Page 4: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

 � ������������ ������������������ ������ �������!"��

w��4| � x � vI� ¢7� ±èxN±�w vzyc{�yc|,} ¦ �� w��$|�*s � } z � v � } | � vC� ¢ w�m 3 m y m���m y m���m } ¦ �N� ° � � � w��$|�*s �g� w��|�!s � w��4| � x � vI� ��� | } ± ��� v ��q��� � � � �1� vI��s � |zXw�� �e� �9w � uq± ¢ '�sq| �q� zNs@¨ � ° � v � |z � | w {�y m��m } w��PÎÑ{Ï � ° �q� w �í�K¥N� �ªt ���q� �w�� } � |z � v � w��#�Ns�w���x �y� |Éu,t � |z � | } s{�4| � w���� � sq|z { � � � m���mB± ¦

Á   �N� �4|wyì � vI��� � } z � � 39� � s\° ��� v � } �q���y��� Ïeá�BNã f Ù ÐBÕeÙ���ÚyãKâ ��� � �í� v �]� � } � tXwy| �q� w&% ��� |$s � w��$|w���x � w��z`|z � �� vs{� �t � } w�ì } |Éu,t � �c� � } z � � ��� ( ±T� � v|z � vI�ªsqv �q� �w�� } ����� � �q����� z � ��s{� � u � ��wy° � vI� �q��� uÀê ��� �4|wyì ��� |Éu,t � � �|z � v � w��T��s&� ����� |$s �K¥ t � w } wy| � uL¨#vIwy| � s � |�|z � �$u>� � s ��� sqv � ��w�° � vI� �q� ê ��� �4|wyì } � |w�s{� �l� � � |z � �c¨ � �w��GÄt � u§¨#vIw�| � w 3 } w��b|z �9�K¥N� �ªt �y��� � s@° � ±   �¾sq|z � v]¨*sqv � � ���q��� |Éu,t � ° � vIw � �X�y� � � v � w��ªt � w } wy| � u � ��wy° � vI� �q��� uê ��� ��|w�ì ��� ± Ã

Ç�w��$|� � v �9� } s{�9�9s{� � u � � ���b��� | � �$|$v � } | � v � w�� �7� � } |wys{� �q�j��� �Nx �X� x � � ��� � �b� v �9� xqs4s � ° � z�w } �y�G� sqv�K¥ t ��� w���w��Nx`|z � t�vCw�� } wyt ��� �#s � t�s � u,�ªsqvItXz�w���&± £ z ��� w��$| w vzyc{�yc|,} w�� �T� � �q����� w�� � } | �X�q��� uU�IzNsqv|z � � �§� sqv|z �À� w��$| v - ~ { - ~ | - w }��*� � ¨�z � v � w } w��P|z �©� �ªt�| u � w��| � � �b- w��P|z � w��Nì ¥ sqt � v � |$sqvG|z � | �q��� ��wy|��ì�vI�$|� vx � � � ��|�|$s¤|z ��� vs{�4|]s � w�|��� � } s{� �Ë� vIx � � � �4| ¢e�¤� w��|C¦C±�� È>w�� } �t- w���vIwyx{z4| � ��$s } w � |wy° �q� ¨ � } � � �q� �$s¨#vIw�| � |z�w�� � w��| � � v - { - | - w } ±

� � � � �K¥N� �ªt ��� s ����� � � v$Ä �N� ìX� �����e� � } |wys{��|z � |�sqt � v � | � �js{� � w��$|� � } s{���w �N� v�|z � t�vIs �X�y� � s � } s � �4|w��Nx|z � � � � �1� v�s �����y� � � ��|��w�� �9� w��|�¯9*7 � >*(�' -1- w 3 }rq1s ��� ()7,>�7�=9*7 � >*(�' w } � (9*7 � >*(�' ~ p - p 4 � � v u 9*7 � >*(�' p 4

£ z�w�� �N� ìX�Xwy|wys{�9w�� �q� �ªs{�|!� ���y� Ä �K¥ t ��� � � |$sqvuq±gò � } � �©v ���q� |z �T� ê ��� |w�s{��� � �S� � u,w��NxN¯ �$£ z �c�y� �Nxq|z�s � |z �� �ªt�| u � w��$|�w���� ��� � � |z �ª�y� �Nxq|zUs �!�À� w��|#¨�zNs{� � ì�vC�$| ���y� � � ��|�w�� p � � � v � � � w�� �N� v�w�� p 4 w�� � t ��� ��|z ��y� �Nxq|z¤s � p 4 ± ¡�¢ '�sq| � |z � � � �9w���x } s{�4° � �4|wys{� � � ��� z � v �qñ p 4 w��c|z � t ��� v �q� s � p �l� � � �IzNs �����§�1� v ���q�|z � |#¨ � uq± ¦

�T� |zNs � x{z^w��4| � wy|w�° �q� |z�w�� �K¥>� �9t �y� z�wyx{z � w�x{z�|� � �^w��ªt1sqv| � �4| � �$t � } |Gs ���T� � �q����� |z � |Gw���u � |ª|$s �1��K¥ t ��� w�� ��� ¯ BNÙqÏÖÏÉãKÐBÎbÝ9ÙqÏdÔ K�Õ7Î4Ü{± £ z ���y��� |ÅÄÉz � � � �w �N� �Ss � |z ��� ê ��� |w�s{��� } s{��| � w��ít � |$| � vI����� � } z � � w } � � �p - p 4 ±   � �À�7� � } |wys{� � t�t � w } � |wys{�§|z � � � t � |$| � vC��� � v � � � | } z ���¾� x � w��X�$| � } | ���q� t � v � � � | � vI�Pw�� �&�7� wyv � uw��4| � wy|wy° � ¨ � u ¢ w } s{� � uP� � | } z � �j|z �S� �ªt�| u � w��| �M� � � p - p 4 ¨�w ��� � � }�} � �� �7����� u�� � | } z � �4u � w��|�¨�wy|z � | �y��� �$|s{� �G���y� � � �4| �1� w�� � w��Nx p |$sÀ|z � ì�vI�| ���y� � � ��| � � � p 4 |$s©|z � v � �|Ts � |z ��� w��$|C¦C±   � |z � � � | } zb� � }�} ����� � �|z � vIwyx{z4|ÅÄÉz � � � �w ��� w�� � ° �q����� | ���b� � � v � | � vI� ���§� �c|z � v � � ��� |�s � |z ��� t�t � w } � |wys{�2±   � wy| �7� w � � � |z � � �K¥ |� ê ��� |wys{�&w��#|$vIw ���2�N� � � w ���q���2� ê ��� |wys{�X� �7� w �Ö�N� � � vvsqv#v � � ��� |��±

Þ � ìX��w��Nx �e� � } |w�s{��� � u�t � |$| � vI�9� � | } z�w��Nx�w��gê � wy| � } s{�9�ªs{�`w�� ��� � �q�����Ö�{� � � |z �#� � � vj�IzNs �������1� } s{� ��e� �9w � w � vj¨�w�|z�|z � ° � vIw�s � � � w�� � ��s � t � |$| � vI���g|z � | � v ���q��� s@¨ ���2ñ ¨ � ¨�w ��� v � | � vI�G|$sP|zXw��jw��� �N� w��`È � } |wys{�GÂN±

£ z �R9*7 � >,(,'í�7� � } |wys{�Lw�� �q� �$s � � �K¥N� �ªt �y� s �¬� t1s � u>�ªsqvtXzXw } �7� � } |wys{�2±   | } � � ����� t�t � w ��� |$s ��� w��$|} s{�4| � w���w��Nx ����� � � ��|��s ��� �4uÀ|Éu,t �q��� sqv �K¥>� �ªt �y� wc��� (�7*>17,= } � w ��'�3�= } � sqv w1wC��� (�7*>�7�= }*} ±

9*7 � >,(,' w vzyC{�yc|,} % ë9*7 � >,(,' w�m 3 m y m��m y mA��m } % ë9*7 � >,(,' w*w v6};y w {,}�y w |,}1} % ë

��� v ��� v � |ɨ*sªsq|z � v � � ���e��� t�s � u,�ªsqvItXz�w } �e� � } |w�s{���¬s{� � w��$|�¬|z � |*¨�w �����1�T� � ���À��� | � v�±/� � � } |wys{� '87�3��v � | � vC���S|z � ì�vC�$| ���y� � � �4|#s �g�ª� w��$| �N�e� � } |wys{� (83 � 9 v � | � vI��� �q���1�X� |�|z � ìXvI�$|�±

��`¢C�I�� �P¢C£ �;¤����e���*�R[9Z�� [���������¢��I����������£ �\[9Z��"¡XQ ���e� ¤���¥

Page 5: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� � � � ��E� ��������� �������� #

'�713�� -1- w 3 }rq1s 3'�713�� ~ p - p 4 � � p(83 � 9 -1- w 3 }rq1s w 3 }(83 � 9 ~ p - p 4 � � p 4

�T� � w �q� 9,7 � >*(,'�� |z � � �T�7� � } |wys{��� � v � �Nsq| �N� ìX� ���©� sqv �q��� t1s{��w �X�y� ° �q���N� �!s � |z � w�v � vx � � � ��|�± � v � �4|w�� �� vvsqv�s }�} � vC��¨�z � �À|z � � �P�7� � } |wys{��� � v ��� t�t � w ��� |$s � � � �ªt�|Éu � w��$|�±

ò wy|z½t1s � u>�ªsqvtXzXw } | u4t � � � ¨ � ìX� � |z � |`�s{� � |Éu,t � � � v � w�� � � � ��� � �$|$vCw } | � u[�9sqv � x � � � v �q� |z � �sq|z � vI�Tw��L|z � � � ��� � |z � |�|z � � � |�s � ° �q���N� ��|z � u �N� ìX� � w�� ��� vIx � v�±��Nsqv �K¥N� �ªt �y�q� |z � |Éu,t � w 3 } w��T�ªsqv �x � � � v �q� |z � �rw �I'�3�= } ±   �Àsq|z � v#¨*sqv � � � |z �P��� |$| � v�| u4t � } � � �1�P�N� vCwy° ���À� vIs{� |z �P� sqvI� � v � u � � � wy| � �X�y�� �N� �$|wy| � |wys{� � sqv 3 ±jò wy|z9v � x � v � |$s�|z�w��/x � � � v �q� w&% � |wys{��sqv �N� vCw��Nx ���T� � �q�����ÖÌ �!|Éu,t � �$u>�$| � � t�s{�I� � �� � �!|ɨ*sw��ªt1sqv| � �4|Tt�vsqt � v|w � ��¯#�jwyvC�$| �1� ° � vuU¨ ����� Äd| u4t ���§�K¥ t�v � ��w�s{�Uw��Tx ��� v � ��| ����� |$s&z � ° �9�À� ��w�ê �N� t�vCw�� } wyt �q�|Éu,t �&¢7�K¥ t ��� w�� ���U����� s\¨T¦ ��� � � � � } s{� �2� |z � t�vIw�� } wyt �q� | u4t � } � � �1� w�� �=� vv ���U�q� |$s{� � |w } �q��� u ¢�@ ÂN± � ± ë{¦C±   �} s{�ªt � vCw��$s{��|$s � �ªs{�Ns{�9sqvtXz�w } �q��� u�| u4t ���G��� �Nx �X� x � � � } z � �gr � |z � v ���q�N� vj¨�w ��� ìX� � |z � |jt1s � u,�9sqvtXz�w��I�w��ªtXvs\° � � �K¥ t�v � �I�wy° � � � �� ��� � � |Éu,t � w�� �7� v � � } �P�y� �I� � ���S|z �P�� v �N� �©s � |Éu,t � ��s{�í|z � tXvsqxqv � �9� � v\±

� � �K¥ t�v � ��wys{� Ì �!sqv �e� � } |wys{� Ì �!t�vIw�� } wyt �q� | u4t � w��!|z ���y��� �$|Sx � � � v �q� |Éu,t � |z � | � w���| � wy|wy° ��� u ��� } s{��| � w��X��q��� w��X�$| � � } � �#s � |z �P�K¥ t�v � �I�wys{� ¡ ±¬��sqv �K¥N� �ªt �y�q� |z � t�vIw�� } wyt �q� |Éu,t � s �z'�713�� w��xw 3 })q*s 3>ñ w � }�q1s 3>��3 q1s 3>�sqv � ° � � 3&� v � } sqvv � } |�|Éu,t � � �l�X� |c|$s,síx � � � v �q�Ö� ¨�z � v ��� �P�s{� � |z�w��Nx � w �q� wC��� ()7,>�7,= })q*s ��� ()7,>�7,= w��c|$s,s�$t � } wyì } ± £ z ���K¥ w��$| � � } � s ��� �Xw�ê ��� t�vIw�� } w�t �q� |Éu,t � �Sw��¬|z � z �q��� � � v �G�7��� | � v � s � |z � å Õ7ÎÒ>Ú�ãKá ���¤Õ7Ú Î1ãKÐ�Ïeá�BNãâCáMâKÏÉãKÝ � ¨�zXw } z � sqvC�9�G|z �À�X� �w���s � |z � | u4t � �$u>�$| � �9�Gs �T��� � �q�����Ö� ÆUÇ � ÆLw�v � � ���>�í� � � � � ° � v �q� sq|z � v¢ �ªs{�$| � u �e� � } |wys{� �q� ¦ ��� �Nx ��� x � ��±

/+0 / � I�G�< ���EG�����G�� DF8�=HGLI

ò � } � � ��� ìX� � s � v�s@¨��L| u4t � �Tw�� �T� � �q������� �w��Nx � ��3�()3��N� } ��� v � |wys{� � ¨�z�w } z&¨ � w���|$vs ��� } � °,w ��� � � vIw � �s �j�K¥>� �9t �y� � ¢�@ ÂN± ç,± � ¦C±

� �&w��ªt1sqv| � �4|�t�v ����� ìX� ��� |Éu,t � w�� �T� � �q����� w��#|z � |�s � |$v � |zí° �q���N� ��¯�)3�(83��)<*<�9 ��� 319)4�7����*=���7

£ z � |Éu,t �c��� w��Nx ��� ìX� ��� z � v � w�� ��<1<�9>�N� � � wy|Sz � � �K¥N� } | � u`| ¨!s9° �q���N� ��¯ �1=��87ª� � � � 319)4�7 ± £ u4t ����<1<�9 w��� � �K¥N� �ªt �y� s �2�9¢ � ������� vIuN¦!Ïeá�BNã�ÔCÑ ÎNâBÏeÐBÓ�Ô�ÏdÑ Ð �>� � � �1=!��7P� � � � 319)4�7P� v �]¢e�q� �$s]� ������� vIuN¦!Ò{ÙqÏdÙ9ÔCÑ ÎNâKÏeÐCÓ�Ô�ÏdÑqÐI⢠sqv ®� �$|]ÔCÑ ÎNâKÏeÐCÓ�Ô�ÏdÑqÐIâ �X� sqv��zNsqv|C¦C±

È>w��9w ��� v � u � ¨ � �9wyx{z4|�¨�w��zÀ|$s �N� ìX� �P� } s � sqv�|Éu,t � ¯�)3�(83 �1<19*<�= �#" 7 �$��%,=)7*7 � �&�89'��7(� ��� � � >�<���) � <�9,7,(

Ê sq|z �)<*<�9À� � � �1<19*<�=U� v �G�K¥>� �ªt �y� �cs �¬� � � � � v � | ��� | u4t � � � �Iw�� } � |z � u } s{�X�w��$|Ts �*� ìX�Xwy| � � � � �1� vTs �� ������� vu ��� | � } s{���$|$v � } |$sqvI��±

��� v � w�� � � �K¥>� �9t �y� s �j� |Éu,t � ¨�wy|z ®� �$|Ss{� �]�X� | � } s{���$|$v � } |$sqv�¯�)3�(83�*)< � � (r3 � *1( 3 3

Ê*� } �q� � � s � |z � �w��Nx �y� } s{�X�$|$v � } |$sqv �,� |Éu,t ��� w �q��*)< � � ( w��js � | � � } �q���y���9� ÏeÓ6BÚ�ãcÏeá�BNã � �w�� } � w�|/w�� � �� � �4|w �q��� u+',.- �$£�¢��I�6¢�/.�R[�¢VQ £�¢A���10P¢C£ �.�]U32��\[ �"¢C£ ¡2S54��]UQ W`¢C£ ���I��Q���¥

Page 6: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� � ������������ ������������������ ������ �������!"��

®� �$| � } � v| � �w � �Àt�vIs ��� } | ¢ w��©|z�w�� } � � �P� w�� � vIuN¦gs � sq|z � v�| u4t � ��±��   � } s{��|$v � �$| � � ��� |w Ä } s{���|$v � } |$sqv�|Éu,t � � �� � } z � � �)<1<199� � � �1<19*<�=X�X� v � } �q�������¾¢e� w�� ® s{w��4|C¦ � ��wys{�©sqv�� � � |Éu,t � ��±

ÆLsqv � w��ªt1sqv| � ��| � u � zNs@¨ � ° � v � *�< � � ( w�� � � �K¥N� �ªt �y� s �c� t�s � u,�ªsqvItXz�w } |Éu,t � ¯ � sqv � �4u½|Éu,t ���C� wy|�N� ìX� � �S|z � |Éu,t � s � } � vI| � �w � �&t1s{w��4|�S|z � | � � ���*� ��|z � } s4sqv � w�� � | � | u4t � ± £ z � *�< � � ( | u4t � } � �&��s\¨ �1�� ��� � } �y��� v � u � � �À� � � vuí| u4t � } s{���$|$v � } |$sqv � �w�� } ��� vs{� |z � | u4t ��� wy| } s{���$|$v � } |� � � � ¨ |Éu,t � *)< � � (�� ±¢   �U|z � � � � � � � ��� �q��� �Iw��Nx`|z �G� w��$| �K¥N� �ªt ��� x{w�° � � ��� v � w � v � w } w�� �q� �$s � |Éu,t � } s{���|$v � } |$sqv�± � wy° � � � ��u|Éu,t ��� ¨ � } � � �$� t�t � u ¡ w } |$s©u>w �����¤� � � ¨ð| u4t � w � } ± £ z �G�T� � �q����� �$u>��| �M¥b�q��� s@¨�� w } � |$s �1� ¨�vIwy|$| � �� � w � } ±PÈ>w��`w ��� v � u � q1s w�� � | u4t � } s{���$|$v � } |$sqv\¯#x{wy° � �§|ɨ*sÀ|Éu,t � � ��� � ��l�� q*s � w���|z � | u4t � s �g�7� � } |wys{���� � t�tw��Nx ���y� � � �4|��s � |Éu,t ��� |$s ���y� � � �4|��s � |Éu,t ��� ± ¦

'�sq| � |z � |`|z � |Éu,t � s � |z �L� w�� � vu ��� | � } s{�X�$|$v � } |$sqv **( w�� 3 q*s 3 q*s *)< � � ( 3���� � � |z � ��|z �� s ��� s\¨�w��NxG|Éu,tXw��Nx{� � v � ° �q� w � ¯*1( { :\( | :X( -1- *)< � � ( � 9,<�3�(*1( m 3 m m���m -1- *)< � � ( ��'�3�=*1( �*=���7 � 319)4�7 -1- *)< � � (��)<*<�9

¼c�í|z � sq|z � v�z � � �2��� � �K¥ t�v � �I�wys{�í� � } z � � **( m 3 m v w��#w ��� Äd|Éu,t ���À�1� } �q� � � m 3 m � � � v � v � s �g� w&H � v � �4||Éu,t � ��±

  |gw��gw��ªt1sqv| � �4|�|$s � w��$|w��Nx � w��z �1� |ɨ ��� � � t�t � u,w��Nx � Ò{Ù{ÏdÙ�ÔCÑ ÎNâKÏeÐCÓ�Ô�ÏdÑqÐg|$s�u,w �������Rf Ù Ú ÓXã �{� � �ª� t�t � u>w��Nx� ÏeáCB�ã`ÔCÑ ÎNâBÏeÐBÓ�Ô�ÏdÑ ÐT|$sÀu,w �����L� Ïeá�BNã ñ |z ��� sqvI� � v�z � t�t � ��� � |�v � �>Äd|w�� ��� � � w���z�s\¨ ¨ � } s{�ªt � | � |zXw��Nx{�w�� �T� � �q�����d� ¨�z � v ��� ��|z ����� |$| � v�z � t�t � ��� � | } s{�ªtXw ��� Äd|w�� �]� � � w��#t � vI|#s � |z � |Éu,t � �$u>�$| � � Ì ��t�vs } � ��#s �� ��� � vIw��Nx�|Éu,t � � � �7� |Éuq±

Á £ u4t � } s{���$|$v � } |$sqvC�!� � } z � � *)< � � (ª� � ����� | � } s{���$|$v � } |$sqvC�!� � } z � � *1(9� v � w��`� � t � v � | � � � � � �$t � } � ��±£ z�w�� �q��� s\¨���|z � � � � � � � � � |$s �1�P� � ���í� sqv � sq|z � |Éu,t � } s{���$|$v � } |$sqv � � �&�X� | � } s{���$|$v � } |$sqv �� �#w��í|z �� s ��� s\¨�w��NxN¯

�)3�(83�*)< � � (r3 � *)< � � (r3 3ò z�w �y� |z�w��c� � u§� ��� � �©� wy|$| �y� } s{� �e� �w��Nx � |�ì�vI�$| � w�|c� � v° � ��|$s&� � �q� |z �9� w�� �í�1� |ɨ ��� � � |Éu,t �9� � � wy|���� | � } s{�X�$|$v � } |$sqvT�ªsqv � s � °,wys � ��± Ã

��� ���� �������������� �"!$#&%'���

£ u4t � � } � � �q� �$s �1� v � } � vI�w�° �q��� ��w��À|z � |Éu,t � s �j� w�� � vu9|$v ��� ��¯�)3�(83��1=�717 3 �)( 7�3 * 3����1=83 �`� ' ~ �*=)717 3 � ~ �*=)7*7 3 �

��� v � ¨ � z � ° �*��� ìX� ���]� t1s � u,�9sqvtXz�w } � w�� � vu�|$v ��� | u4t � ¨�z�s{� �¬���y� � � ��|� � v �¬� w�|z � v �y��� � ��s �N� � } s{��| � w��Xw��Nx� ° �q���N� s � |Éu,t � 3>� sqv�w���| � vC� �q� �Ns �N� � ¢K�Å� v � � } z � � ¡ ¦ } s{��| � w���w��Nx ¢ v � } � vI�wy° ��� u�¦¬|ɨ*s�� ��� Äd|$v ��� ��±

ò z � �&v ���q� w��Nx ��� | �`�N� } ��� v � |wys{�X�#� � } z � �#|zXw�� � v � � � � �1� v � x � w��í|z � | �1=�717 w�� � |Éu,t � } s{���$|$v � } |$sqv �¨�z � v ��� � �*=83 �`� '[� � � ( 7�3 * � v �í��� | � } s{���$|$v � } |$sqvC��± � �w �N��� vIs{� � �$| � �X� w��Iz�w��Nx � } s{��� � } |wys{� �1� |ɨ ��� �|z � � � } s{�X�$|$v � } |$sqvI� � |z �P� � s\° �P�N� } ��� v � |wys{�íw�� � �� � �4|w �q��� u �N� ìX��w��Nx�|z �T� s ��� s@¨�w��Nx�|Éu,t � � � sqv �*=83 �`� '©� � �( 713 *�¯�1=)3 �`� ' -1- �1=�717 3 q*s �1=)7*7 3 q1s �*=)717 3( 713 * -1- 3 q1s �*=)7*7 3*,+* �Z2¤��\[ ¢c£ ��[ � 0.�XW�S2¢]Q ¤�� �A��£ �"¡"��£��&[z� ��� QTS2��£z¤ ¢C�.-� I¢/-��\["¥

Page 7: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� ���+� .���J�'�>�� � ï

ò wy|z¾|zXw�� �K¥N� �ªt �y� ¨ � z � ° �À�N� ìX� ���¾� |Éu,t � � � J } w � ��| � uUvIw } zb|$s �q��� s\¨ �N� ìX��w��Nx&�$s{� � w���| � v � �$|w��Nx¢ v � } � vC�wy° � ¦ �7� � } |wys{����|z � | � � � wy|�±P��sqv �K¥>� �9t �y�q� � � tXt�s{� � ¨ � ¨�w��z§|$s �N� ìX� �G�À�7� � } |wys{� * = � � >�7 |z � |v � | � vC��� ��� w��$|js �1�q��� |z �����y� � � ��|�/w��G|z �#�y��� ° � �¬s ��� |$v ���#� vs{� �y��� |g|$s�vIwyx{z4|�±   | Ì � � � ���q��� u]z ��� t �e��� |$s]¨#vIwy| �� s@¨��L|z � |Éu,t � s � � � ¨ �e� � } |wys{����ì�vI�$| ñ w��í|zXw�� } � � � ¨ � � ��� |z � |T|z � | u4t � �zNs �����í�1�5�*=)717 3 q*s w 3 } ±£ z � |cw�� � * = � � >�7 w�� � t1s � u>�ªsqvtXz�w } �7� � } |wys{�L|z � | ��� sqv � ��uL|Éu,t �\3�� � � t��|$v ��� �cs �3 w���|$s � w��|�#s ��3 ± �� � w�| � �X�y���N� ìX��w�|wys{� � s ��� s\¨���¯

* = � � >17 -1- �*=)7*7 3 q1s w 3 }* = � � >17 ~ ( 7�3 * p�� � w p1}* = � � >17 ~ �*=83 �`� ' 9*7 * ( = � >�')( � � * = � � >�7 9*7 * ( u1u * = � � >�7N= � >�')(

��� v � u1u w��S|z � w��Nì ¥ sqt � v � |$sqv�|z � | } s{� } � | � � � | � �T| ¨!s � w��$|� ¢ wy|� �e�������N� ìX�Xwy|wys{�©¨�w �����1� x{wy° � �&w��LÈ � } |wys{�� ± � ¦C± � ��¨�wy|z�|z � 9*7 � >*(�'��K¥N� �ªt �y� x{wy° � � ��� v � w � v � |z � * = � � >�7Ë�7� � } |wys{��w�� �N� ìX� ����� �Iw��Nxét � |$| � vI�� � | } z�w��Nx ���K¥ } � t�|#|z � |�z � v � ¨ � � ��� t � |$| � vI����w���°qs � °,w���x � � � v$Ä �N� ìX� ��� } s{���$|$v � } |$sqvC��¯'( 713 * � � � �*=83 �`� ' ±Á '�sq| � |z � |/|z ��� sqvI� �q� t � v � � � | � vI� � v �#��� �w � u�w �N� �4|wyì ���G� �g|z � s{� � � �1� x{w�����w���x�¨�wy|z � s\¨ � v$Ä } � � ���y� |$| � vC��± Ã

/+0�� DF8�=HG�� 8 ��4 � 8�: I

�Nsqv } s{�4° � ��w � � } �q�g�T� � �q����� t�vs\°>w �N� � � ¨ � u¾|$s �N� ìX� � Ïeá�BNã�âCá ÎÑqÎ�á Ý�â ñ wÖ± � ±�� � � � � � sqv } s{�9�ªs{� � u � � ���|Éu,t � ��± £ u4t � �$u>�Ns{�4u,�`� � v � } v ��� | ���U� �w��Nx � (��,+87`�N� } ��� v � |wys{� ¢�@ ÂN± ç,± ç{¦C± ��� v �]� v � � � ° � v �q�2�K¥N� �ªt ��� ��¯(���+�7��(*= � � > � w ��'�3�= }(���+�7#*)7�=�4I< � ��~� 3 ��7 y�� � �*=�7�414 �(���+�7 3 ��7 � ��(1= � � >�)3�(83 � � �*=�7�414 �� < � 7(� � � �*=���(*= � � >

£ u4t � �u,�Ns{�4u>�9� � s§�Nsq| ��� ìX� � � � ¨ |Éu,t � � �j�X� |]�w��ªt � uUx{wy° � � � ¨ � � � � � � sqv �K¥ w��$|w��Nxí| u4t � ��±&��sqv�K¥N� �ªt �y�q� |z � | u4t � *�7,=�4I< � q*s 3 ��7 w��*t�v � } w�� ��� u � ê � wy° �q�y� �4|!|$sg~ ��(*= � � > y�� � �*=)78414 � q*s ��(1= � � > ± £ z �� � ¨ � � � � � � v � s � | � �[�IzNsqv| � v�|z � �¾|z � |Éu,t � �]|z � u � v � �$u>�Ns{�4u,�ªs � �P¨�wy|z �l�X� |]|z�w��]w��]�Nsq|�|z � s{� � ut � vIt�s{� � s � | u4t � �$u>�Ns{�4u,�9��¯l|z � u } � � �q� �$s�w��ªt�vIs\° � v ���q��� � w � wy|Éu�s � t�vsqxqv � �9� � u �1� w��Nxc�ªsqv � �9� � �ªs{��w } ñw�� �������2� |z �]� � s\° �P�K¥N� �ªt ��� �#z�wyx{z � wyx{z�|S|z�w���±jò � } � � � ° � �Lx{wy° � � � ¨ � � � � ��|$s`t1s � u>�ªsqvtz�w } | u4t � ��¯(���+�7 � 4*4�< � ( � 42( 3 � � w2~ 3 y � �6}

£ z�w���w��S|z � | u4t � s ���$� ��$s } w � |wys{� � w��$|� ¡ ¨�zXw } z � ��s } w � | � ° �q����� ��s � | u4t � 3 ¨�wy|zÀ|z�s{� � s � |Éu,t � �1±

/+0�� ���BA�6��'� A � DF8�=HGLI�� <>G�� 4����+=HGLC-A! 6

h � v � w � v�¨ � w���|$vs ��� } ��� � � ° � v �q���Å�X� w � |ÅÄÉw�� ¡ |Éu,t � ��� � } z � � � w��$|� � | � t �y� � � w��4| � x � vI� �q� � � } z � v � } | � vI��±gò � z � ° ��q� �$s9�IzNs\¨��LzNs\¨�� � ¨ � � � vÄ �N� ìX� ��� | u4t � � } � � ���P��� ìX� ��� ± � �w �N�c� vs{� �$t � } w �q� �u,�4| �M¥���� v � |z �P�� w � |ÅÄÉw��|Éu,t � �Sw�� � �4u`¨ � u©�ªsqv � �$t � } w �q� |z � �©|z �T� � � v$Ä �N� ìX� ��� s{� � �#" £ z �T� ���¨ � v�w���ÎÑ ± £ z � �$t � } w �q� �$u>��| �M¥ w��� sqv } s{��° � �Xw � � } ��� � �À� sqv } s{���w��$| � � } u�¨�w�|zíz�w��$|$sqvIw } �q� } s{��° � �4|wys{� ���� |#z � �#�Ns9� � � � ��|w }P} s{��� � ê �N� � } � ��±

ò � } � � � �ªtXz � �Iw&% � |z�w��jt1s{w��4| � u } s{���w �N� vCw��NxT¨�z � |g|z � | u4t �#�N� } ��� v � |wys{���g¨*s �����ª� s,s ��� w �q��� sqvg|z � � ��X� w � |ÅÄÉw��í| u4t � ��w � w�� �e� } |�¨ � ¨ � v �G�q��� s\¨ ��� |$s � � � |z � �t � } w �q� �$u>�4| �M¥ w�� �N� ìX�Xw��Nx9|z � �&±P�Nsqv �K¥>� �9t �y�q�|z �Z��'�3�= |Éu,t � �`wyx{z�| �1� ¨#vCwy|$| � � � ��¯

Page 8: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

î � ������������ ������������������ ������ �������!"��

�)3�(83 ��'�3�= �jm 3 m � m��m � m���m �t:*:1: q1q �,' � 4 � 4 � <,(��)319 � �� m � m � m � m � m � m �t:*:1: q1q�� 3)465)7�919 � < �17��� m v m � m { m � m | m �t:*:1::1:*:

£ z � � � } s{���|$v � } |$sqv�� � � � � � v � �Nsq|S�$u,�4| � } |w } �q��� uª° �q� w �2ñ |$s�ì ¥ |z � � ¨ � ¨*s ����� z � ° � |$s�¨#vIw�| � �$s{� � |zXw��Nx� w �q� ¯

�)3�(83 ��'�3�= � ��3���� � �l� � �t:1:*:�l� � ���!� �l�1�$�t:1:*:�l� v ��� { �l� | �t:1:*::1:*:

h/° � �é|zNs � x{zb|z � � � } s{���|$v � } |$sqvI� � v � �ªsqv � } s{� } w�� �q� |z � u � v � ê � wy| �`� � } s{��° � �4|wys{� �q�g� sqv]v � t�v � � � �4|w��Nx} z � v � } | � vI��±

  � � �4u } � � �q� ¨#vIwy|w���x � tX� ����� s Ä �T� � �q������¡ } s �N� w��~|z�w��`¨ � u�z ��� t� � ��|$s[� ��� |zNvs � x{z�|z � �$t � } w �q��$u>��| �M¥ ±�ò � � ��� �Ns\¨�|z � | �I'�3�= w�� ®� �$| � � � � � � � v � | ��� |Éu,t � } s{���w��$|w��Nx9s �/�©��� vx � � � � �1� v�s � � ������� vu} s{���$|$v � } |$sqvI��± £ z�w�� � w��Nxbs �Z��'�3�= w���|z�w���¨ � u�� � �q� �íwy| } �y��� vÀ|z � |©¨ � } � �×t � |$| � vI�NÄÉ� � | } z � x � w����$|} z � v � } | � vI�Pw�� �e� � } |wys{� �N� ìX��w�|wys{��� �{®$� �| � �c¨ � ¨!s �����L�K¥ t � } |T|$s �1�G� �X�y� |$s � s©�s � sqv � ��uUs �!� |Éu,t �qÌ �} s{���$|$v � } |$sqvI��±

Á £ zXw�� �K¥N� �ªt �y�&�q� �s �N� �ªs{���|$v � | � �`|z �L� � � s � ÔCÑ ÝGÝ9ã�ÎXÏ7â`w�� �T� � �q�����dñ |z � } z � v � } | � vI� q1q � � �~�q���� �N� � � ê ��� ��| } z � v � } | � vC�G|$s§|z ��� � � s � |z �À� w�� �`� v � wyx{�Nsqv ��� ± ��� � �q�����S�q� �$sLt � vI�`wy|�9Î�ãKâBÏÉãIÒ } s{�9� � �4|�¨�z�w } zíz � ° � |z ��� sqvI��� q���Gq�� � � � } � � � tXt ��� v � ��u,¨�z � v �`¢�@ ç,± ç{¦C± Ã

È>w��9w ��� v � u � ¨ � } s �����&��� ìX� � ��� (b¢ ì ¥,��� t�v � } w��w�s{�©w���| � x � vI�B¦ � � � ��� ()7*>17,=`� u¯�)3�(83 ��� ( � q� k*k |1{ � :1:1: � q�v � ((� v �t:*:1: � k*k |1{ q*q ��<,=�7 + 4I7 � �1< q � < �17�)3�(83 ��� ()7,>�7,= � :*:1: q*{ � q�v � ((� v � { :*:1:

¨�z � v � q� k*k |�{ � � � k1k |�{ � � � u �� v � |z � � �M¥ w�� � � � � � �9w��Xw�� � � ì ¥,��� tXv � } w��wys{�Àw��4| � x � vI� � sqv � x{wy° � �w��ªt �y� � � �4| � |wys{�2±P��� ( w�� � � � } z ��� vx � v � � � � � v � |w�s{�í|z � � ��'�3�=���X� |�w�| Ì �#�$|w ��� ì��wy| ���   � } s{�4|$v � �$| � |z �tX� ���X� s Ä } s ����� sqv���� (�7*>17,= w���w���| � � �N��� |$s } s{�4° � u � �¾Õ7Î��/Î�ÕeÏÉã � � � � � v � |w�s{�2±

£�� t �y� � � v �]�q� �$s ��� �$uÀ|$s ��� ìX� � t ��� u,w��NxG|z�w��Sx � � � ¯�)3�(83 ~ 3 y � � ��~ 3 y � � q*q ��<,=�7 + 4I7 � �1< q � < �17�)3�(83 ~ 3 y � y � � ��~ 3 y � y � ��)3�(83 ~ 3 y � y � y � � ��~ 3 y � y � y � �: :: :: :

h � } z �N� } ��� v � |wys{� � � s\° �À�N� ìX� � � � | � t �y� | u4t � s ��� t � v|w } ����� v ��� �Nxq|z � ¨�wy|z ~ :1:*: � t ��� u>w��Nx � vs �y� w��� sq|z9|z ���K¥ tXv � ��wys{�`�$u,�4| �M¥§¢e� � ��� | � } s{���$|$v � } |$sqvK¦ � � � |Éu,t � Ä �K¥ t�v � �I�wys{�`�u,�4| �M¥§¢e� �!|Éu,t � } s{���$|$v � } |$sqvB¦C±£ z � ° � v|w } �q��� sq|� � � | � v&|z �¤��� �$| �N� } ��� v � |wys{� � v � w��4| � � �N��� |$s } s{�4° � u � � w��NìX��wy| � � � � �1� v©s � � � } z�N� } ��� v � |wys{��� � v ��X� } |w��Nxª|z �P�e� } |#|z � |�| � t �y� �Ss �g�q���2�y� ��xq|z�� � v �P�q��� s\¨ ��� w�� �T� � �q����� ±

Ç�w��$|� � v �P�q� �$s ��� �w � u�z � � �X�y���2�N� � � �ªsqv � w���| � v � �$|w��Nx � u � |z � u � v � v � } � vI�w�° � ¯��3�(83 w 3 } � w } �x3j- w 3 } q*q ��<,=�7 + 4I7 � �1< q � < �17

ò � } � �©�Ns@¨�� ��� } �y��� v � u�¨�z � |/¨ ����� � } vIw �1���ª� � s � | � w��$|� ��� v � w � v�¯ w } w��g|z �#� �9t�|Éu � w��$| ��� � �n- w��/|z � w���ì ¥

Page 9: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� ��� �N������� � ��������P� ���� ��� ���&�]�� � �

� w��| } s{���$|$v � } |$sqv ñ |z � � w vzyC{�yc|,} � � �$| ����� ê � wy° �q��� ��|�|$s§|z �©� w��$| v - { - | - w } ± ¢I- w��]vIwyx{z4| � �I�$s } w � |wy° � ± ¦£ z � | u4t � s � w } w��xw 3 } �X� � � |z � |Éu,t � s � - w�� 3 q1s w 3 })q1s w 3 } ±

Á £ z � ¨ � u �)-Å¡ w�� �N� ìX� ��� z � v � w�� � } | ���q��� u �y� x �q� �u,�4| �M¥,� w��Nì ¥ } s{���$|$v � } |$sqvC� � v � t � vI�9w�|$| ��� w�� ��3�(83�N� } ��� v � |wys{��� �{� � �ª� v �S� w��$|w��Nx � w��z ���]� vs{�ðw��Nì ¥ sqt � v � |$sqvI� ¢7� sqv/t � |$| � vI�NÄÉ� � | } z�w��Nx�t � vt1s{� � �B¦ � u�|z �S�e� } ||z � |#|z � uÀ� � �$| �1� x{w��À¨�wy|z �¾�)- ¡&¢e� t�vsqt � v| u`|$vIw�°,w �q��� u`� � |w��ì ���À� u �)- ¡ ¦C± Ã

� |�|z�w���t1s{w��4|�|z � v ���q��� v��zNs �X��� �Nsq| � } � v ���7����� uU|z �`� wGH � v � � } � � �1� | ¨ ��� �[| � t �y� � � � �¾� w��|� � ¨�z�w } z|z �©� � s@° �í�N� ìX��wy|w�s{����� � �q�À� �X� � ��� �4| � u } �y��� v�±   �ét � v|w } ����� v � �Nsq| � |z � v � } � vI�w�° � � � | � v � s � |z �©� w��$||Éu,t � ¨�zNs{� �G���y� � � �4|� � v � zNs{�ªsqx � � � s � � � � � s �!� v � wy|$v � vu �y� �Nxq|z �2� � � |z � �Ns{�NÄdv � } � vI�w�° � � � | � v � s �S�¢ t � v|w } ����� vB¦/| � t �y� |Éu,t � ¨�zNs{� �c���y� � � ��|� � v � z � | � vsqx � � � s � � � � � s � ì ¥>���À�y� �Nxq|z2± £ z � |Éu,tXw��Nx�v ���y� � � sqv| � t ��� � � � �&� w��|���zNs ����� �Ns@¨ �q� �s ��� } ����� v�¯

�Nsqvl~]! F y !&# y ���8y !� � ����� ç � w � ��� w��S|z � | u4t � s � ! �Å� |z � �À|z � | u4t � s � |z � | � t �y� w��\~ � F y � # y ���)y � � ±�Nsqv w�! F y !&# y ���)y !� }������ � ����� } z ! � � � �$|#z � ° � |z � � � � � |Éu,t ���C��� � � |z � |Éu,t � s � |z �]� w��|Sw��xw � } ±

���� ��� � � ��������� %��.�! �!" ���#�$" �&%�"('*) �.�#�+ ,� �-��� �/.��10&���!" � ���

� �/¨�wy|zªÇ�w��$t � w �q�y� } |� ��� w��$|� � v � t � vI° � �w�° � w�� ��� � �q�����Ö�4� � �9� �¬¨�wy|zGsq|z � v �e� � } |w�s{� �q����� �Nx �X� x � � � |z � v � w��u � |g�ªsqv � �$u>��| � } |w } � � x � v�|$s � w � w���|z � wyv } v ��� |wys{�2± � �w �N�!� vIs{� |z � } s{���$|$v � } |$sqvI� � sqv � w��$|� ®� �$| � w�� } � �� ���2��T� � �q����� t�vIs\°>w �N� � � � �K¥ t�v � �I�wys{� � �Ns\¨�� � � � Ú Õ�âKÏ*ÔCÑ Ý�BÐ$ã K>ãKÎ�âCÕÖÑ ÎÀ|z � |�w�� �1� �$| �K¥ t ��� w�� ���©� u �K¥N� �ªt �y� ¯w * p � p32*q p 4 }

£ z�w�� �K¥ tXv � ��wys{� } � �Uw���| � w�|wy° ��� u ��� v ���q�U� � � |z �G� w��$|�s �/�q��� * p � � } z&|z � | p w�� � v � ¨�� � vs{� p 4 ± ¡½£ z ��w��`w ��� vIwy| u9|$s�� � |��Nsq| � |wys{�§w����Nsq| � } s{w�� } w ��� � } � ± £ z � tXzNv � � � p42*qtp 4 w�� } �q���y���&� Ü4ãKÎ1ãKÐ$ÙqÏdÑ Ð � s � ¨�z�w } z�ªsqv � |z � �ís{� � w�� �q��� s\¨ ���2��� ��w��2¯w ~ p�y � � � p52*qtp 4 y � 2*q ��4 }

£ z�w�� � w��$| } s{�ªt�v � z � �X�wys{� � sqvI�9��|z � } � v| � �Iw � �LtXvs �X� } |#s � |z � |ɨ*s � w��$|� p 4ª� � � ��4 ± £ z �P���y� � � �4|� � v �� ���y� } | ���í� ��w � |z � x � � � v � |$sqvI�S¨ � v �í� � � �$| ����¡�� vs{� �y��� |!|$sªvIw�x{z�| ¢ ¨�wy|z�|z � vIwyx{z4|�ªs{�$|*x � � � v � |$sqv#° � vu>w��Nx�e� �$| � �$|C¦ ñ |z � � � w � p 4 w�� w vzyc{,} � � � ��4 w�� w |�y0�1} � |z � v � � ��� |#w��xwI~ vzyc|�� y ~ vzy"���zy ~ {�yc|�� y ~ {�y"����} ±

Ê*� �w ��� ��x � � � v � |$sqvI� �1� s4s �y��� � �K¥ tXv � ��wys{�X� } �q���y��� ÜqÓ�Ù Ð$ÒMâ � v � t � vI�9wy|$| ��� ± ����� v � ��t ��� } � } s{�X�$|$v � w��4|�s{�©|z �T���y� � � �4|�!x � � � v � | ��� ±¬�Nsqv �K¥N� �ªt ���q� z � v � w�� � } s{� } w�� �c�N� ìX��w�|wys{�9s ��� ° � vIu � s � u Ì � �e� °qsqvIwy| � �sqv|w��Nx�q� xqsqvIw�|z��í¯

6 � � � 5�4�<�=1( w } � w }6 � � � 5�4�<�=1( ~ p - p 4 � � 6 � � � 5`4�<�=1( w � � � 21qtp 4 y � 2�p }

u1u w p*}u1u 6 � � � 5`4�<�=1( w � � � 21qtp 4 y � s � p*}

£ s �7� vI|z � v�� � t�t1sqv|�|z �ª� � � s �!� w��$|� �1��� � �q����� z � ���$t � } w �q� �$u,�4| �M¥U� sqv`Ù ÐBÕ7Ï K4Ý9ã�ÏeÕeÔ`â�ã���ÓXã�ÎÔCãKâ � ¨�z�w } z� v �P�1� �$| �K¥ t ��� w�� ���©� u � � � vIw � ��s �j�K¥>� �ªt �y� ��¯

w v :1: v ( } % w vzyc{�yc|�y0�;y k y ;y87;y:9�y:;�y�v ( }w v yc| :1: v ( } % w vzy0|;y k y:7�y:;*}w v yc| :1: } % w vzy0|;y k y:7�y:;;y :1:*: ¢ w��Nì��wy| � � � ê �N� � } � ¦

ÆLsqv � ¨�w ����1� � � w �í� � s � | � vIwy|z�� � |w } � � ê ��� � } � �#w��LÈ � } |w�s{� î ± ç �X� � ��� w��NìX��w�| �c� w��$|� ¡ w��LÈ � } |w�s{�Lë,±èÂN±

Page 10: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� � � �������P �!���

���� � .$���.� "�� �

� � � �Nsq|z � v �K¥N� �ªt �y� s � �$u,�4| � } |w } � � x � v � sqv �X� w � |ÅÄÉw��`|Éu,t � � � ¨ � �Nsq| � |z � |�|z �c� wy| � v �q� �$|$vIw���x�� '87�919,< ��w��� } | ���q��� uG�IzNsqv|z � � �G� sqv¬|z ��� w��|�s � } z � v � } | � vI�lw�m ' m y m 7 m y m 9 m y m 9 m y m < m } ±   � �N������� |z � | u4t � s � � '87�919,< �w�� ��(*= � � >X� ¨�z � v � ��(*= � � > w�� � t�v ����� ìX� ��� |Éu,t � �$u>�Ns{��u>� ¢ |z � |�¨ � x � ° ��� � � � ��� v � w � v �K¥>� �ªt �y� ¦C¯(���+�7��(*= � � > � w ��'�3�= }

£ z�w���� ��� ����¨ � } � � � � � t�v ���N� ìX� ��� t�s � u,�ªsqvItXz�w } � w��$| �e� � } |wys{�X�S|$s9sqt � v � | � s{�&�$|$vCw��Nx{��±g�Nsqv �K¥>� �9t �y� ¯

� '�7�9*9*< � u1u ��� <�=89 � � % � '87�9*9*< � <,=89 � �

ª¹ª´Gº�µ2»·�´RS

È>w�� } ����� � �q����� w�� �]�7� � } |wys{� �q�X��� �Nx ��� x �q� s{� � ¨*s �����`�K¥ t � } | �7� � } |wys{���g|$s�t ��� u � � �@® sqv*vs �y�q�>� � � w�� �N�����|z � u � sN±   �í|z�w���� � } |wys{� � ¨ �]� s,s �©� |�� � ° � v �q�l� �t � } |�#s ���e� � } |w�s{����w�� �T� � �q����� ±

�jwyvI�| � } s{���w �N� v�|zXw�� �N� ìX�Xwy|wys{�©s ���9�7� � } |wys{�À¨�z�w } z �q��� �#w�|��|ɨ*s � vx � � � ��|��¯3�� � -1- ��� ()7,>�7,= q1s ��� ()7,>�7,= q1s ��� ()7,>�7,=3�� � p � � p u �

£ z�w���w�� � � �K¥>� �9t �y� s �T� Ô�Ó>ÐCÐBÕdãÒ �e� � } |wys{��±�� � � � t�t � w } � |wys{�^s � 3�� � z � �G|z �í� sqvI� 3�� � ! F ! # �S� � �w�� � ê � w�° �q�y� �4|`|$s ~ 3 � � ! F � !&# � �w�� } �U�7� � } |wys{� � t�t � w } � |wys{� � ��$s } w � | � �©|$s[|z � Úyã DBÏe±   ��sq|z � v©¨!sqv � � �� t�t � u,w���x 3�� � |$sbs{� �&� vx � � � ��|9u>w ����� � � � � ¨ �7� � } |wys{�^¨�z�w } z^w��G|z � � � t�t � w ��� |$s¾|z � � � } s{� ��� vx � Ä� � �4|�± £ z�w���w�� } s{���w��$| � �4|c¨�wy|zU|z � |Éu,t � s �3�� ��� ��� ()7,>�7�= q1s ��� ()7*>17,= q1s ��� (�7*>�7�={� ¨�zXw } z§w�� � ê � w�° �q�y� �4||$s\��� ()7*>17,= q1s ~���� ()7*>17,= q1s ��� (�7*>�7�= � ñ wÖ± � ± q*s � ��$s } w � | � �!|$sP|z � ÐBÕyÜ K4Ïe±   � �N�����2�4� �w��Nx 3�� �� ¨ � } � � �N� ìX� �� ���Gw�� �ª� wGH � v � �4|�¨ � u � vs{� ��� v � w � v�¯� ��� � 3 � � v

£ z�w��#w�� � � �K¥>� �9t �y� s � |z � B>Ù ÐKÏeÕÖÙ Ú/Ù�B�BÚ ÕeÔCÙqÏeÕÖÑ Îís �/� } � vIvIw ���í�e� � } |wys{� �X� � � w��#s{� � ¨ � u&|z � | �`�7� � } |wys{�} � � �1� v � | � vC� ���½� � � ° �q���N� ±~Ç � | Ì � } s{���Iw �N� v � } � � � w��^¨�z�w } z½wy| Ì � � � ���7��� |$sét � �� �¤�e� � } |wys{� � � � �� vx � � � ��|�± £ z � ¨ ����� Ä � ��s\¨�� �`32+í�e� � } |wys{�íw�� � t � v �=� } | �K¥N� �ªt �y� ¯

�`32+ -1- ~ 3 q1s � �nq*s w 3 }rq*s w � }�`32+ * w } � w }�`32+ *�~ p - p 4 � � * p - �`32+ * p 4

Á � � � } |wys{� � t�t � w } � |wys{�&z � ��z�wyx{z � v#t�v � } ���N� � } � |z � � � ��uíw��Nì ¥ sqt � v � |$sqv ��� � � |z � �#|z � vIwyx{z4|ÅÄÉz � � � �w �N�s � |z � � � } s{� �[� ê ��� |wys{�Ët � vC� � � � � ~]* p�� - ~ �`3I+ * p 4 � ± à £ z � �`32+é�e� � } |w�s{�[w���t1s � u>�ªsqvtXz�w } � � �wy|�T|Éu,t � w�� � w } � | � � } �y��� v � u&|z � |Pwy|�Tì�vC�$| � vIx � � � �4|cw�� �À�e� � } |w�s{� ñ �Nsq| �9�q� �$s©|z � |�|z � |ɨ*s 3�Ì ��� � �| �1�w����| � ��|w � | ��� ¨�wy|zb|z � � � � � |Éu,t �¤¢e� w �q� ¨�w�� �ª� sqv�|z � � Ì �C¦C± � � � � �K¥N� �ªt �y� s � |z �`� � � s � ��3I+�� ¨ � } � �w�� } v � � � ��|�|z �P���y� � � �4|�#w�� �9� w��$|�¯

��3I+ ~ 3�� � v*� w v yC{�yc|*} % w {�y0|;y0�*} + S6� �I¢ 0.�������������6� £ ���e�X[ U £ � 0 QTS2� Z�� £T[ �A� W�S6� Z���Z6 2¤ ¢C£ ���"�0� QTS2� � �6�0¢�����¢ [ �e� ¤ ¤��� 6£ £ ��¥+1� -A�XQ QTS2�������"¡XQ�� U�¢C�

�������������! #"+UG 6�2¡XQ ����� �&W`��¡"�� 2¤ �� �[ �;¢%$&�('*)+ �I¢][����,�-/.0.21436587:9 ;<3>=?7

@  &Q7QTS6�"� W`��[ �"�+QTSI¢�Q QTS2�R[ �e� £T[ ���A��� U -/.A. �R[ £ �0¢C¤ ¤$�CBE �[�Q�¢BUG 2�6¡XQ ���A���]U)�A�6�;¢C£ -� '0.�"� QED

Page 11: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� �,� ������R��� � �� �.� �9� �'��� �q�

£ z � � �9�K¥N� �ªt �y� � ��� �ªs{���$|$v � | � |z � ì�vC�$|ÅÄ } ��� ��P� � | � v � s �S�e� � } |wys{��� � ¨�z�w } z¤¨�z � � � � ��� w��¾|z�w���¨ � u� v �]� � ���q��� u } �q���y��� K�ÕyÜ K>ã�Ð �$Ñ Ð$Ò�ãKÐ �7� � } |wys{����±

�+021 � :�� � ���@I � < C��>A24 �BI

  ���$| ���q� s �1� �w���x � ê ��� |wys{�X�g|$s �N� ìX� �*�e� � } |w�s{��� � ¨ � } � � �q� �s �N� ìX� � |z � � �$� ��s{��u>�ªs � � � u ¡ °>w ��� ÚyÙ Ý �Ò{ÙÙ��KâBÏeÐ$Ù{Ô�ÏeÕÖÑ Î�±P�Nsqv �K¥N� �ªt ���q���©�e� � } |wys{� � ê � w�° �q�y� �4|T|$s � ��� } s �X���L�1� ¨#vIwy|$| � � � � o�p q1stp1u�v ±�È>w��9w ��� v � u �|z �P�e� � } |w�s{� 3 � � w�� � ê � w�° �q�y� �4|�|$s o,prq*sro � q1stp*u � ±V' � �$| ���U��� � �1�X�ª� � �$|$v � } |wys{�X�#� � } z � �#|z�w���� � u�1� ¨#vIwy|$| � � � �w��NxG|z �P� ê � wy° �q�y� �4|��zNsqv|z � � � �Nsq| � |wys{� o,p � q1stp*u � ±   � �e� } | � |z �]� ê ��� |w�s{����¯� ��� p � p*u`v3�� � p � � p*u �

� v � v ���q��� u��IzNsqv|z � � �À� sqv�¯� ��� � o�p q*stp1u�v3�� � � o�p � q*stp1u �

ò � ¨�w ��� z � ° � �ªsqv � |$s�� � u � � s � |#� � } z � ê � wy° �q��� � } � � ��� | � v�±  �íx � � � v �q�d� x{wy° � �&|z � | p z � �#|Éu,t � � F � � � 7 p + z � ��| u4t ��� # � |z � � o,p)q*s 7 p + z � �#|Éu,t ��� F q1s � #M±

�+0 / � � ��� =HGL< � 47<�I

  �Nì ¥ sqt � v � |$sqvC� � v � v ���q��� u ®� �$| �e� � } |w�s{��� �{� � � } � � �q� �$s �1�#�N� ìX� ���9� �w���x � ê ��� |wys{�X��±���sqv �K¥N� �ªt �y�q� z � v �w�� �9��� ìX��wy|wys{�©s �g�9� w��$| } s{� } � | � � � |wys{�Lsqt � v � |$sqv�¯~ u*u�� -1- w 3 }rq1s w 3 }rq1s w 3 }w } u1u ��4 � ��4~ p - p 4 � u1u ��4 � p - ~ p 4 u1u ��4 �

Á Ç �K¥ w } �q��� u � w��Nì ¥ sqt � v � |$sqvI� } s{���w��$| � �4|wyv ��� u`s �T� �$u>� � s � � � ¡ª� �Ssqt�t1s{� ��� |$s9�NsqvI� �q� w �N� �4|wyì � vI�!¨�z�w } z � v ��q� tXz � � � � � vIw } ¢�@ ç,±èÂ4¦C± �T� � �q����� z � �G�NsLtXv � ì ¥ sqt � v � |$sqvI� � ¨�wy|z¾|z �©�K¥ } � t�|wys{�Ës � �9w�� � � ¢ q ¦ � ¨�zXw } zËw��� sq|z&w��Nì ¥�� � � t�v � ì ¥ ± Ã

� � � �Nsq|z � v �K¥N� �ªt ���q�>� �Lw��ªt1sqv| � �4|*w���ì ¥ sqt � v � |$sqv�s{� �e� � } |wys{�X�*w��!|z � | � sqv�DBÓ>ÎÔ�ÏeÕÖÑ ÎbÔIÑ Ý�B>ÑMâBÕ7ÏeÕÖÑ Î�¯~ : � -1- ~"� q1s � �nq*s ~ 3 q*s � �nq1s ~ 3 q1s � �* :�> � otp q*s * ~ > p��

���� ���� .���� ��� �$" �

È>w�� } � w��Nì ¥ sqt � v � |$sqvI� � v � v ���q��� u ®$� �$| �7� � } |wys{��� � wy|�� � �q� ��� � ��� � |$s �1�P� �X�y� |$s9t � v|w �q��� u � tXt � u`|z � � � �¨ ����� ±   � ��� � �q����� |z � t � vI|w �q�2� t�t � w } � |wys{�Às ��� �Uw��Nì ¥ sqt � v � |$sqv�w�� } �q�������&� â�ãIÔ�ÏeÕÖÑ Î�±¬��sqv �K¥N� �ªt �y� ¯

~ p1u�� o � q*s p1u �~ u � � o,prq*s p1u �~ u�� o�p � q1stp*u �

Page 12: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ç � �������P �!���

Á £ z � t � v � ��|z � � � � � v � � � � ��� |$sqvuq± ã z �À��� �$| � sqvI� s � � � } |wys{�^x{w�° � � � � s\° �í� �� � �4|w �q��� u } s � v } � � � �~w���ì ¥ sqt � v � |$sqv`w��4|$s � � � ê � w�° �q�y� �4|

�e� � } |wys{� �q� ° �q���N�q�g� � � w��]z � � � ub¨�z � �[t � ��w��Nx � �^w��Nì ¥ sqt � v � |$sqv � � � � � vIx � � � �4|�|$s �U�7� � } |wys{� �g� �w�� �`3I+ ~ u�� w vzyC{�yc|,} ¢ |z � v ���q�N� v��z�s ����� ° � vIw � u^|z � |�|z�w��ªv � | � vI��� �[� w��$|ªs �c�e� � } |wys{��� � ¦C±   |�w�� �q� �$s� � } � �� � vu�¨�z � �©x{wy°,w��Nx ���e� � } |wys{�©| u4t � �wyx{� � | � v �q�N� ��w��©|z �c�K¥>� �9t �y� �Ss � ~ u1u�� � � � ~ : � x{wy° � � ��� v � w � v�±

ò � } � � ��s\¨ � ��� |z � | 3�� ���N� ìX� ���×��� v � w � vÀw�� ®� �$|n~ u�� ��� � � � �`�[w�� ®$� �$| ~ u`v,� �   � �N�����2� |z � � ��N� ìX�Xwy|wys{���*¨*s �����í� s ®� �$|�ìX� � ¯� ��� ��~ u v*�3�� � ��~ u��

ò � } � � } s � v } ��� �©w��Nì ¥ sqt � v � |$sqv�w��4|$s ���e� � } |wys{� �q� ° �q���N�q�>�X� | } � �À¨ � xqs�|z � sq|z � v*¨ � u "�� � � � ¨ ��w��9t � u � � } � s{� �`� �éw �N� ��|w�ì � v � s � � � |$s �í�e� � } |w�s{� �q� ° �q���N� w�� �X� } � ê � sq| � ��±À�Nsqv �K¥>� �ªt �y�q� p�� 3 � � � �w��T|z � � � � �ª� � 3�� � p � ±��½È,s{� �G�7� � } |wys{����v ���q�§�1� |$| � v�|z�w���¨ � uq± � � �K¥N� �ªt ��� w��T|z � t�v ���N� ìX� ���U� w��$|� � � �1� vI�z�wyt�t�v ��� w } � | �7�9*7 ��ñ |z �S�K¥ t�v � ��w�s{� p�� 7�9,7 � �xp 4 } � � �1� v ���q� w��4| � wy|wy° ��� u � � � p w�� � � ���y� � � �4|s � p 4 ± ¡

Á £ z � v �Ë� v � �s{� � �$t � } w �q� v ���y� �Uv � x � v � w���x×� � } |w�s{���¤w���°qs � °,w���x�|z � t�v � ì ¥�« w���ì ¥ sqt � v � |$sqv q ñ � ���¢�@ ë,± # �G@ ë,±èÂ4¦C± Ã

� |P|zXw��Tt�s{w���| � |z � v ���q��� v]� � u �1� } s{� �7� � ���b� |Pz � °>w��Nxí�$s&� � ��uU¨ � u,�]|$s �N� ìX� �ª�À�e� � } |wys{� ��£ z ��N� } w��Iwys{�í|$s`tXvs\°>w �N� |z � � � � � } z � ��w��I�9��t � v| � u©v ���� } |��zXw��$|$sqvIw } �q� } s{�4° � �4|wys{��� �1� � � t � v| � uÀv ���� } |��|z ��N� �w�v �c� sqv } s{�X�w��$| � � } u ¢7� sqv �K¥N� �ªt �y�q� w��À|z � |$v ��� |� � �4|�s � w��Nì ¥ °,��±/v � x ����� v �e� � } |w�s{���C¦C±

���� �� � �� �#�/#� ��� � % � % ��� ��"��

� ��d{Õ7ÏeáíÒ�ãÔ�Ú ÙqÐÅÙqÏeÕÖÑ Î } � � �1� x{wy° � � � sqv � �4u&w��Nì ¥ sqt � v � |$sqv�sqv } s{���|$v � } |$sqv ¢ w�� } ����� w��Nx�|zNs{� � � �q�N�P� vs{�sqv � w�� � vu]w ��� ��|wyì � vI� � � � } z � � � 719*7 � � ¦C± £ zXw�� �N� } ��� v � |w�s{�ª�$t � } wyì � � � t�v � } ����� � } ���y� ° ���N� vs{� ��|$s �`¢ ¨�wy|z�©�1� w��Nx�|z � �$|$vs{�Nx � �| ñ �NsqvI� �q��� tXt � w } � |wys{�§w�� � �� � � ��� |$s&z � ° �9� tXv � } ���N� � } �ª�y� ° ��� s �c� ��¦ �l� � �b�y��� |ÅÄ �vIwyx{z4|ÅÄ � sqv���s{�>Ä � ��$s } w � |wy°>wy|Éuq±!�Nsqv �K¥N� �ªt �y�q� |z � ì ¥ wy|Éu �N� } ��� v � |wys{�X� � sqv u*u � � � :*� v � ¯� �-* � p = k u1u� �-* � p = ; :

Ê sq|zés � |z � � � �$t � } w � u§vIwyx{z4|ÅÄ � ��$s } w � |wy°>wy|Éu � |z � ìXvI�$|P¨�w�|z � t�v � } ���N� � } ����� ° ��� s � # � |z � sq|z � v � ±&Ç ��� |� ��$s } w � |wy°>wy| u�w����$t � } wyì ��� °>w � � �-* � p 9>�N� � � ��s{�>Ä � ��$s } w � |wy°>wy|Éu � u � �-* � p ± ��� �$s � |z � ì ¥ wy|Éu�s � �ªsqv � |z � �s{� � sqt � v � |$sqv�� � u ��� �$t � } wyì ��� ¨�wy|z©|z � � � � � ì ¥ wy| u �N� } ��� v � |wys{�2±   � �Nsªì ¥ wy| u �N� } ��� v � |wys{�íw��Sx{wy° � � � sqv� t � v|w } ����� vgsqt � v � |$sqv � w�| �N���7�q�X� |�j|$s � �-* � p 9 ; ± ¢ È ����@ #,± �P� sqv �]�N� | � w �y���ª�N� ì��wy|wys{��s � |z �#� ��$s } w � |wy°>wy|Éuv ����� ��± ¦

�+0�� � � �BC��>AT4 �VI� <>G � 4 � � I � <�A�C��

È � tXt�s{� � � <,( w�� �N� ì� ���í� u¯��� � Q ��¡0¢c£ �XUG 6¤�¤�� QTSI¢�Q -(.0. �R[ � �2¡"¤���[ �"��� �����A���������($4 �� ���6� Q���'���� $&����'! : �� ¢][  �[ �0����� QTS6�+[E���$Q�¢�Y�� U8¡2SI¢C£�¢C¡XQ � £T[#"2�?¥ �A¥%$'&($`�R[¢ ¡2SI¢c£�¢�¡XQ ��£ �&W�S6� £ �0¢][*)&()��R[z¢������!+�Y��Z�� £�¢�Q ��£0¥-,2��£9Q  6�I¢�Q �"¤$� � 0.��[�Q/. 42�1020-Q � £�0.���I¢C¤ [z���R[�Q � ��-A 6� [9S QTS2�\[ � 0� 6¡�S.���XQ9Q ��£ QTSI¢C�

QTS2� UG�A� Q  �[ �"����� QTS2�R[ 0P¢��� �[ ¡ £ �RZ�Q0¥

Page 13: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� � !1�����L���2�������!���� �� +��� �:� ���� � ë

� <�( �N� <,(  �ésq|z � vª¨*sqv � � � � <,( w�� � ��s{�>Äd| � vI�9w�� � |w��Nx �K¥ t�v � �I�wys{�2± ��� �$|$v � } | � u � ¨ �í�N� �Nsq| � |z � f Ù Ú ÓXã�s ��� �Ns{�>Ä| � vI�9w�� � |w��Nx �K¥ t�v � �I�wys{� � ��� ¢ v ���q���Å� sq|$|$s{� ¡ ¦C±�h ¥ t�v � ��Iwys{���#|z � |�v � � �X� |�w��U�$s{� �]� w�� � s �/� v � �>Äd|w�� �� vvsqv � � � } z � � v /.(N�{�q� �$s�z � ° � |z�w���° �q���N� ±/È � } z � � � vvIsqv/w��j�Nsq|jv � } s\° � v � ��y� ¯jt�vsqxqv � �9��¨�w ��� ��sq| } s{�4|w�� �N�t � �$|�|z � � �*� vvsqvC��±�h¬vvsqvI� � � } s � �4| � v ����� u�|z �   « ¼��$u,�| � � � � � } z � � � � � � � Äds � Ädì �y�¬� vIvsqv �q� v � v � } s\° � v � ��y�� � �§� v � z � � ���y��� w�� ��� wGH � v � ��|T� � ��� � v\± ¢ È � } z � �   « ¼ � vvsqvcw���v ���q��� u&�Nsq| � � � vIvsqv � | �q���l�X� |�v � |z � v� � �K¥ } � t�|wys{�2±*Æ � } zL�ªsqv � ¨�w �����1� � � w �í� � s � | �K¥ } � t�|wys{����w��LÈ � } |wys{� ï ± ¦

� �7� � } |wys{� *`w��S� � w � |$s �1� âBÏeÐBÕeÔ\Ï2w � � ¨�z � � � t�t � w ��� |$s � �Ns{�4| � vI�9w�� � |w��Nx �K¥ t�v � �I�wys{� � wy| �q� �$s �e� w � �*|$s| � vI�9w�� � | � ±   �`sq|z � v*¨!sqv � � � *Gw��!�$|$vIw } |*wGH&|z � ° �q����� s � *t� <�( w�����±g�Nsqv��ªs{�$|*t�vsqxqv � �9�`w��Nx ��� �Nx �X� x � � �Ù Ú7Ú �e� � } |wys{�X� � v � �|$vIw } |�± ÊS� |c|z�w��Tw��T��sq|c�sÀw�� �T� � �q����� ± � � � �Iw��ªt �y���K¥>� �9t �y�q� } s{���w ��� vZ� < � 42( v � |z �} s{���$| � �4| �c�e� � } |w�s{� ���N� ìX� ���À� u�¯� < � 42( vXp � v

£ z � ° �q���N� s � � < � 42( v � <�( w�� �T� � �q����� w�� v ±í¼Tt � v � |wys{� �q��� uL�$t ��� � w��Nx � �w�� } � � < � 42( v � s � �P�Nsq| � � ������¡|z � ° �q���N� s � wy|� � vx � � � ��| � w�|S� � ° � v � |$| � �ªt�|��|$s � ° �q����� | � wy| �N� � � |z � �S� � ° � v�x � |� } �q� x{z4|#w�� � �Ns{�4| � v$Ä�9w�� � |w��Nx } s{�ªt � | � |wys{��±��Nsqv]|z�w��Tv ��� �$s{� � �Ns{�>ÄÉ�$|$vIw } | �e� � } |w�s{��� � v �9�q� �$s } �q���y��� �$��� %�u �e� � } |wys{�X� ¡>��� � �� v � � � w � |$s � ° �q����� | � |z � w�v � vx � � � �4|� �$��� %�w � u ¡>� sqv �Å� uí� �����X¡ ±

È>w�� } �!� vIvsqv � � � �Ns{�4| � vI�9w�� � |w��Nx�° �q���N� � � v � � � � � ��|w } �q��� uP|z � � � � � w�� �T� � �q�����Ö� |z �S� � s@° �#� vx � � � �4|�q� �$s9z�s ��� � � sqv � vvsqvI��±¬�Nsqv �K¥N� �ªt ���q� � < � 42( v ~ v /�( � �q� �s � ° �q���X� | � �#t�vsqt � v � u9|$s v ±

'�s{�>ÄÉ�$|$vIw } | �e� � } |wys{��� � v �]�K¥ |$v � � ��� u � � ���7�X� w�� � ° � vIw � |Éuís � } s{�4| �K¥ |��± £ z � � � w�� �q� ° � ��| � x � w��#|z � ||z � u � v ��� |z � t�vIsqxqv � �9� � v � vIs{� � � �4u } s{� } � vI�X� � � s � | � ° �q���X� |wys{�`sqv �N� v�±¬r*s{�ªt � | � |wys{� �q��� u �K¥ t � ���wy° �° �q���N� �T� � u �1� t � �� ���§� � � vx � � � �4|�T|$s �e� � } |wys{�X�#¨�wy|z�s � | �7��� v�s � |z � � ��� w��Nx } s{�ªt � | ��� w � |z � u � v ��Nsq|�� �����N��� ± � �&w��ªt1sqv| � �4| �K¥>� �9t �y� s � |z�w���w�� � t�s{�I�w �X� uíÕ7Î��/ÎXÕ7ÏÉã ��� | � �$|$v � } | � v � ±

� �Nsq|z � v/¨ � u�s ���K¥ t ��� w���w��Nxc�Ns{�>ÄÉ�|$vIw } | �7� � } |wys{���jw��j|z � | �T� � �q����� } s{�ªt � | � � � �w��NxªÒ�ã �¬Î�Õ7ÏeÕÖÑ ÎNâ#v � |z � v|z � �í|z � ÙMâIâBÕ Ü{Î�Ý`ãKÎXÏ7â � s � � � w��À|$v �q� wy|w�s{� �q�2��� �Nx ��� x � ��±¬¿ ���q�&�`�N� } ��� v � |wys{�L� � } z � �

� � v /.(� ��� �N� ìX� � �ª� � v /.(NÌ w����$| ���q� s � � } s{�ªt � | � v /.(�� � � �$|$sqv � |z � v � � ��� |/w�� �Ì ±¬¼c� � u�w � |z � ° �q���N��¢e�N� ì��wy|wys{�¦s � � w��`� ��������� ¨�w ��� |z �U� wy°>w��w�s{� � u % � vs � vvsqv9s }�} � v�± Ê u½wy|� ���y� � |z�w�� �N� } ��� v � |wys{� � s � ���Nsq|`w��ªt � u� �4u } s{�ªt � | � |wys{�2± � vsqxqv � �9�9w��Nx � �Iw��Nx � ��wyx{��� � ��|�Gv � ê � wyv � � } � v ���7����� |$| � �4|wys{�½|$sé|z � sqv �N� vIw��NxUs �|z �G� ��wyx{�X� � ��|��¯�|z � � ��� ��w��Nx�s � |z � t�vsqxqv � � �N� t � � � ��s{�§|z � sqv �N� vTw��&¨�z�w } zU|z ��� �I�wyx{��� � �4|� � v ��K¥>� } � | ��� ±PÞ � ìX��wy|w�s{��� � w�� } s{�4|$v � �$| ��� v � � � } z¤�w��ªt �y� v�¯*|z � u } � � �1� t�v � � � �4| ��� w�� � �4u&sqv ��� vT¨�wy|zNs � |� H � } |w��Nx9|z � � ��� ��w��NxGs � |z � t�vIsqxqv � �í±

�+0�� � � � ���BA!� G �� � � � < �VC�� �B<>GLI

¼c� ���q� ° � �4| � x � s � |z � �Ns{�>ÄÉ�$|$vCw } |g� � | � v � s �1��� � �q����� w��j|z � | ��� | � } s{�X�$|$v � } |$sqvI� � v � �Ns{�>ÄÉ�|$vIw } | � |$s,sN± £ z�w���zNs �X��� �Nsq| �1� � � vtXvIw��w���x � �Iw�� } � } s{���$|$v � } |$sqvI� � v � v ���q��� u ®$� �| � �$t � } w �q�j� w�� � s �S�7� � } |wys{� ¢ |z �`� w��$|w��>Äx � w��Iz�w��Nx �7��� | � v ���1� w��Nx�|z � |�|z � u } � � �1��� � ��� w��Ut � |$| � vI�¤� � | } z�w��Nx4¦C±��Nsqv �K¥N� �ªt �y�q� |z � } s{���$|$v � } |$sqv� sqv � w��$|� � ~ - � � w�����s{�>ÄÉ�$|$vIw } |�±

'�s{�>ÄÉ�$|$vIw } | } s{���$|$v � } |$sqvC�#t � vI�9wy|*|z �P�N� ì��wy|wys{�©s ��¢ } s{� } � t�| ���q��� uN¦�Õ7Î��/Î�ÕeÏÉã �X� | � �$|$v � } | � v � ��± ��� v � w��� �&w���ìX��wy| �c� w��$|Ss � s{� � ��¯

Page 14: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�  � �������P �!���

�jwyx � v �9� ¯*rSwyv } �X��� v���w � s{� � }�} wlÈ � ê ��� � } �

< � 7�4 � v - < � 784��� vIz � tX���ªsqv � w��4| � v � �$|w��Nxªw���|z ���e� � } |wys{��� � �z4 � =)< � ¯� � � 4 � =)< � � �N� - � � �z4 � =�< � ~"� u�v*�

£ z � ��� � � 4 � =)< � �]w��2|z � w��NìX��w�| �j� w��$|2s � � � }�} � ��Iwy° � w��4| � x � vI� �1� x{w��X��w��NxS¨�wy|z��2±j�Nvs{� w�|�¨ � } � � } s{���|$v � } |� �&w���ìX��wy| �c� w��$|Ss � �ê ��� v � ��¯4 6 ��3�=�7�4 � �`3I+ ~�� {8� ~"� � � 4 * =)< � ( �

¢ '�sq| � |z �]� � � s ��� � � } |wys{� ñ ��w��S|z � w��Nì ¥`�K¥ t1s{� � �4|w � |wys{�ísqt � v � |$sqv�± ¦¼ � } s � vI� �q�4� ° � ��| �X�q��� u�¨ ���K¥ t � } |g|$s �K¥ |$v � } |¬�$s{� � ìX�Xwy| � t�sqvI|wys{��s � |z �#� w��$| � sqv � } | ���q� } s{�ªt � | � |wys{� �

� � � |z � v �G� v �ª� sq|�Ts � t�v ���N� ìX� ���L�7� � } |wys{���Tw�� �T� � �q����� |z � | � s©|z�w��T�$sqv|Ts � |zXw��NxN¯ (83I587N�`(83I587��*' � 9*7>�* � 9�(�7,=���� � � sq|z � vC��± £ z �c�N� ìX��w�|wys{�9s ����� � �q����� w�� } ������� � �G��� vx � � � |Ss �l�� w � |ÅÄÉw�� �7� � } |wys{��� � � � |Éu,t � � �|z�w���w�� } �q������� |z �U� È>| � � ��� v �U� v �����X�N��¡ ± £ z � } s{�ªt �y� | � È,| � � ��� v �&� v �������N� w��#w�� } �����N��� w�� � tXt � � � w ¥©�s � |z ���T� � �q����� v � t1sqv| ñ � ��� |z � t1sqv|wys{�ª� � � ��� *1=�7�9 � ��7 ( � 46(�� sqv!� � �4u � � ���e���>�e� � } |wys{���¬w���°qs � °,w���x � w��$|��±�Nsqv �K¥>� �ªt �y�q�)()3�587 v � �9s\° � �#|z � ì�vI�$|�� ���y� � � �4|� � vs{� �9� w��$|�¯

()3�5)7 k 4 6 ��3�=�7�4 % w ( y�v y0��y8;;y�v *}

£ z �`�N� ìX��w�|wys{�§s ��< � 784À� � s\° � w�� � � �K¥N� �ªt ��� s ��� Ô�Õ7ÐÅÔ�Ó>Ú Ù Ð�Ú Õ=âBÏe±   �é�ªs{�$| } wyv } � �9�| � � } � � ��� %�w�� � ��z � � � �íw��ªt1sqv| � ��|�w��9t � } |�s{� � J } w � � } u � �w�� } ��� �&w��9t �y� � � �4| � |wys{� } � � �1���K¥ t � } | ��� |$s9w��ªt �y� � � �4|S|z �� w��| � � � |$v �N� } w�v } ����� v��$|$v � } | � v �q� |z � �#� � °,w��Nx9�$t � } � ±

�Nsqv � ��sq|z � v �K¥>� �ªt �y� s � |z �*� � � s � } w�v } ����� vIw�|Éu � |z � �jw � s{� � }�} w,� � ê �N� � } � } � � ��� } s{�ªt � | ���]� J } w � ��| � u� �#|z ��� s ��� s\¨�w���xGw��NìX��wy| � � � ê �N� � } � ¯

* � � � v - v - w 3 u � � ~ 3 y � � 21q�� � + * � � ~ ()3 � 9 * � � � }¨�z � v � � � + w�� � È,| � � �X� v �~� v �������N�&�e� � } |w�s{�½|z � |©v � | � vI���`|z � t � wyv¨�w�� � w���| � v ����� °>w��Nxés � w�|�9|ɨ*s � w��$|� vx � � � ��|��¯

� � + ~ p - p 4 � ~ ��- ��4 � ��~ p�y � � - � � + p 4 ��4� � + p 4 ��4 � w }

'�sq| � z�s\¨ * � � �2� �§w��NìX��w�| �P� w��$| � w�� ��� ìX� ��� w��&| � vI�9��s � wy|� ���y� ��� �cw � wy|�¨ � v �¤� } z � �w��Nx©w�|��| � w � ± ¡   � �N�����2�¨ � } � � � v � ¨ � tXw } | � v � s � |z�w�� } s{�ªt � | � |wys{� � �#�IzNs\¨��Lw��í�jwyx � v �9� ±

�Nsqv � �Nsq|z � v � t�t � w } � |w�s{�Às � w���ìX��wy| �c� w��$|� � � ��� È � } |wys{�íÂN±èÂN±

Page 15: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

����� ��J���� � �� �(� � � �9� �'� � #

�+0�� D ?�G��5<><>4�< � � �VC�� A24 �

�T� � �q����� z � � �L�� w � |ÅÄÉw�� �7� � } |wys{� } �q���y��� 7�=1=�<,= ¨�zNs{� � |Éu,t � w�� ��(1= � � > q1s 3 ± £ z�w���w�� � �$s{� � ¨�z � |Gs ����e� � } |wys{�2¯S�Nvs{� wy|��|Éu,t � wy| � s,s � � � �Tw � w�|�w���v � | � vI��w��Nx � ° �q���N� s �/� t1s � u>�ªsqvtz�w } |Éu,t ��� � s � |�¨�z�w } zUwy|� �Ns\¨����Nsq|z�w��Nx � �Iw�� } � wy|�� � ° � v�v � } � wy° � � � ° �q����� s � |z � |�|Éu,t ��� � � � � vx � � � ��| �

  � �e� } | � |z � v � Õ=â�s{� � ° �q���N�L� �Iz � v ����¡`� u �q��� |Éu,t � ��¯ �G±   � �������2� � � � � �4|w } �q��� u©|z � |Tw�� �K¥>� } | � uí¨�z � |° �q���N� w�� �q� ¨ � u,�/v � | � vI� ����� u 7,=*=)<�=©¢ v � } �q��� |z � | �q���,� vvsqvC��z � ° � ° �q���N� �P¦C± � s@¨ � ° � v � ¨ � } � � �K¥ t � } |j|z � |� v ��� �$s{� � �X�y� w��ªt �y� � � ��| � |wys{�9¨�w ��� t�vIw���|g|z � �$|$vIw���x � vx � � � �4|¬|$s 7�=1=�<,=�� sqv � w � x{�Ns{�$|w } t � vt1s{� � ��± £ z � �|z�w�� �e� � } |w�s{�§w�� � � ���e��� ¨�z � �§¨ � ¨�w��z§|$sí| � vI�9w�� � | �9� t�vsqxqv � � ¨�z � �b�$s{� � |z�w��Nxíz � � � xqs{� � ¨�vs{�NxN± ¡�Nsqv �K¥>� �ªt �y�q� |z �]� } | ���q���N� ìX��w�|wys{�©s �z'�713�� | � �q� � � vs{��|z � È,| � � ��� v �&� v �������N� w���¯'�713�� ~ p - p 4 � � p'�713�� w } � 7,=*=)<�= � '87�3�� � **=)7�9'� �17 ( � 42( � - '�713�� w } �

� � M.S�Q��RYG¶ Q;S�S1»·T´RS M#´G¸ �XM*µXµ`Q/¶�´ � M*µ�º _ª»C´��

h � v � w � v�¨ � x � ° � � � ° � v �q�¬�K¥>� �ªt �y� �Ps � t � |$| � vI�[� � | } z�w��NxLw�� �N� ì��w��Nx �e� � } |wys{��� ��� sqv �K¥N� �ªt ���[9,7 � >,(,'� � � * = � � >�7 ±   �`|zXw��!� � } |wys{�©¨ � ¨�w ���X� s4s ��� |*|z � t � |$| � vC�>ÄÉ� � | } zXw��Nx�t�vs } � ��Sw��9xqv ��� | � v ��� | � w �g¢�@ ë,± �\ï ¦C±��

�j� |$| � vI��� � v � �Nsq| � ì�vI�$|ÅÄ } ��� �I� ñ ¡ |z � v � w��Ts{� � u � ì ¥,��� � � |cs �*� wGH � v � ��| � w�� � ��s � t � |$| � vC����±Pò � z � ° ��q� v ���q� u�� ��� ��� � ° � v �q�X�K¥>� �ªt �y� �gs � Ò{ÙqÏdÙ9ÔCÑ ÎNâBÏeÐBÓ�Ô�ÏdÑ Ðgt � |$| � vI��� ñ,� sq|z 9,7 � >*(,'G� � � * = � � >17]�N� ìX� ���G��� v � w � v� � � � � } z&t � |$| � vI�X� � |z ��� sqvC� � v�s{�U|z � } s{���$|$v � } |$sqvC��s �/�[�Å�X� w � |ÅÄÉw�� ¡ |Éu,t �©¢e� w��|�C¦ � |z ����� |$| � v�s{� �`� � � v$Ä�N� ìX� ��� |Éu,t �P¢ �1=�717 ¦C±   � �N������� � � | } z�w��NxPw��jt � vI�9wy|$| ���G� �Iw��NxT|z � } s{���$|$v � } |$sqvI�gs �1� ��u�|Éu,t �q��� � � v$Ä ��� ìX� ���sqvª�Nsq|�± £ z�w���w�� } �����N� �]| � t �y� � � �$|$vCw��Nx{� � � � � �1� vI� � } z � v � } | � vC� �¬� | } ±¾�Nsqv �K¥N� �ªt ���q� z � v �qÌ � � } s{��|$vCwy° ����e� � } |wys{�À|z � |�� � | } z � � � x � w����| � | � t �y� s ��� } s{���$| � �4|��¯ ¡� < � (1= � ��7 �j-*- ~�w 3 }�y �I'�3�= y ~���� ( y � 9,<�3�( � y ��(1= � � > y ��<1<�9 � q1s ��<1<�9� < � (1= � ��7 � ~�w };y m��m y ~ vzy { :X( � y � ' � � y �*=���7 � ��� 3*984�7

£ z�w�� �K¥>� �ªt �y�P�q� �$s �N� �9s{���$|$v � | � ��|z � |PÎ�ãKâBÏeÕ7Î4Ü�s � t � |$| � vI�X�#w��St � vI�9wy|$| ���¾¢ |$s � v � wy|$v � vu �N� tX|z¦C±£�� } z��Xw } �q��� u^�$t ��� � w��Nx � D�Ñ ÐBݪÙqÚ�B>Ù Ð$Ù Ý`ã�ÏÉã�ÐIâ�� � v �U�q� �$s¾t � |$| � vC��� � wy| Ì � ®$� �|ª|z � |9|z � u×Î�ã f ãKÐ D�Ù Õ7Ú#ÏdÑ

Ý9ÙqÏdÔ K[Ù f ÙqÚ ÓXãK± � � �~� �w �N�ª� H � } | ¡ s � |z � � � }�} � �� �e��� � � | } z � |z �9� sqvI� �q� t � v � � � | � v�w�� � s � � � |$sU|z �° �q���N� wy|�w�� �1� w���x&� � | } z ���^� x � w��X�$|�±&�NsqvG|z�w��]v ��� �$s{�[t � |$| � vI����w�� � �4u¾s{� ��� ê ��� |w�s{� � v � �Nsq| �q��� s\¨ ���|$s9z � ° � �ªsqv � |z � �Às{� � s }�} � vIv � � } � s � |z � � � � ��� sqvI� �q� t � v � � � | � v ¢e� t�vsqt � v| u } �q���y��� Ú Õ7Î�ãÙ ÐBÕeÏeá @ ë,± �\ï4�@ ë,± ë �z@ ÂN±èÂN± ç{¦C±

�j� |$| � vI���g� � } z � � � sqvI� �q� t � v � � � | � vI��|z � |j� � ° � v �7� w � |$sc� � | } z � v � � � w � |$s ��� Õ=ÐBÐãEDBÓ>ÏdÙ �KÚ�ã � w�� } s{��|$v � �$||$sLÐãEDBÓNÏdÙ��KÚ�ã#t � |$| � vI����¨�z�w } zí� � u �e� w � |$s�� � | } z2± £ z � t � |$| � vC� � � ��� w��À|z � � < � (1= � ��7 �ª�K¥N� �ªt �y��� � s@° �w��gv ���7� | � ��y� ± £ z � v ��� v � |zNv ��� sq|z � v � w�� � �js � wyvv ���e� | � �X��� t � |$| � vI��� � |ɨ*s]s � ¨�z�w } zª¨ � ¨�w ��� w��4|$vs ��� } � �Ns@¨¢ |z � sq|z � v�¨ � ¨�w ���1�N����� u � ��|w � È � } |wys{�íÂN±èÂ4¦C±��� ¢�Q9Q � £ ��0P¢�Q ¡�S6���.- ���?��¢ [ �A�"¤�¤ �R[��6� ��� £ � �$Q@U £ � 0 QTS2¢]QHU �A 2�2�����[¤��/-A��¡ Z6£ � -C£�¢�0 0.���.-i¤ ¢���-A I¢ -A�\[ [  2¡2S�¢ [ � £ ��¤�� -!"����

ZI¢c£9Q ��¡" 2¤ ¢C£ �8� Q ¡0¢�� ��� �����XW`�"� ¢ [ , �A�6��� W ¢"��/50P¢]Q ¡2S2���.-���W�S2� £ �"¢ [ � £ �A¤��/-Z¢C¤�¤ � W�[ , Q W���� W ¢"��/50P¢]Q ¡2S2���.-�� ��� ¢� 2�6� +I¡0¢�Q � ����� �¢�¤����.- Wz� QTS�� 0HZ2¤���¡"� Qz�I¢C¡ � Q £�¢�¡ �����.-����� QT[z� ��¢�¤� I¢�Q ���A� 0.�"¡2SI¢C�2�R[ 0�¥� + S6� 2��XZ���£9Qz¡0¢C¤ ¤R[7QTS2�\[ ��� �(��� ��� )+ ���¥

Page 16: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� � � ��� ��n����������8�!��� [����� �`�� P �� ����� �� %����!"� �

) ��� %,% � � ��� "�� � È,s{� � |w�� � ��wy|#w�� } s{�4° � ��w � �4|�|$s9� � � �]� t � |$| � vI� � sqv � � � s{�í|z � vCwyx{z�|ÅÄÉz � � � �w �N� s �j� �� ê ��� |wys{�2±¬��sqv �K¥N� �ªt �y�q���ª�e� � } |w�s{�À|z � | ��� t � w } � | � �S|z � ì�vC�$| ���y� � � �4|�w�� �ª� w��$|��9wyx{z4| �1� ¨�vIwy|$| � � � ��¯

* ~ p - p 4 � � p - p - p 4¢ ¿ � } �q��� |z � | �)- ¡P� ��$s } w � | � �g|$sP|z � vIwyx{z4|�± ¦ '�sq| � |z � | p - p 4T� t�t ��� vI� � sq|z � � � t � |$| � vI�ªs{�9|z �#�y��� |ÅÄÉz � � ��w ���q�l� � �b� � �K¥ t�v � ��Iwys{�¤s{�b|z � vIw�x{z�|ÅÄÉz � � � �w �N� ± £ sLw��ªt�vIs\° � v ���q��� � w � wy| u � ¨ � �`wyx{z�|�tXv ���=� v�|$sL¨#vIwy| �p - p 4�®� �$|�s{� } �q� ¨�z�w } zÀ¨ � } � � � } z�w � ° ��� �w��Nx � �ËÙMâ � B>ÙqÏÖÏÉã�ÐCÎ � � � s ��� s@¨���¯ F��

* 4� ~ p - p 4 � � p -�4£�� } z���w } �q��� u9�$t ��� � w��Nx �>� �ÅÄdt � |$| � vI��� �q� ¨ � u,�Sv � � ��� |!w�� � � � }�} � �� �7��� � � | } z ���q� |zNs � x{z©|z � � �N� Ädt � |$| � vI� ¢ w��|z�w�� } � � � p - p 4 ¦ } s �����2� s � } s � vI� �q���e� w � ±

�'� '�� � % � '�� � � ��sq|z � v } s{�`�ªs{�G�wy| ��� |wys{��w���� � | } z�w��Nx � x � w��X�$| � ° �q���N� ¨ � v ���q��� u } � v � �Nsq|z�w��Nx � � s � |�±�Nsqv �K¥>� �ªt �y�q� |z �P�e� � } |wys{�X� '87�3 ��� � ��(83 � 9ª��� ìX� ��� w��LÈ � } |w�s{�Lç,± � } � � ��� v � ¨�vIwy|$| � � � ��¯'�713�� ~ p - � � � p(83 � 9 ~ �;- p 4 � � p 4

w��^¨�zXw } z^¨ � z � ° �×�$�q� ° � v|w�� ����¡ |z �&�e� } |9|z � |9¨ �&� s{� Ì | } � v � ¨�z � | � } � vI| � w��½t � v|ªs � |z � w���t � |ªw���±h � } z©¨�w ��� Ä } � v � w�� �N� t � � �N� �4| � u�� � | } z � � � �4u4|zXw��Nx �,�X� |¬w�� } s{��|$v � �|*|$s �]� sqvI� �q� t � v � � � | � v �4��� } z � w�� � ��Nsq|z�w��Nx ñN� sqv�|z�w��Sv ��� �$s{�U�ªsqv � |z � �&s{� � w�� �q��� s\¨ ��� w�� � � � ê ��� |wys{��±

��021 3 � � G�< � ��� �>C.?BA ����+GL: � �>A�C-I

È,s �e� vT¨ � z � ° �9� w�� } � �� ��� zNs@¨­w�� � w�°,w �X���q� t � |$| � vI��� � v � � � | } z ���2� z�s\¨­�$s{� �ª� v � v ���e� | � �X���q� �s{� �9� v �wyvv ���7� | � ��y�q�1� | } ± ÊS� |�¨�z � | � vIwy° � �T|z � s\° � v �q��� t�vs } � �� "   �§¨�z � |�sqv �N� v � v � |z � � � | } z � � � |$| � �ªt�| ��� "ò z � |�w � �Ns{� � � � }�} ����� � " £ z�w���� � } |w�s{� �q��� v � �I� � ��|z � � � ê �N� �|wys{����±

�j� |$| � vI� � � | } z�w��Nx } � � � wy|z � v D�Ù Õ7Ú � âBÓNÔCÔCãCãÒbsqvéÒqÕ f ãKÐÖÜ4ãK± � � � }�} � �� �7��� � � | } z � w�� � �©|z �b� sqvI� �q�t � v � � � | � vI�¬w��G|z � t � |$| � vI�2±gÞcwy° � vx � � } � s }�} � vI�g¨�z � � � ° �q���N� � �����N���ª� uG|z � t � |$| � vC� } s{��| � w���� � � � vIvsqv¢ �P¦C± £ z � � � | } z�w��Nxít�vIs } � ���w�|� ���y� s }�} � vI� � |$sqt�Ä � s\¨�� �l�y��� |ÅÄd|$s ÄdvIwyx{z4|�± ¡ � � w ��� v � s �S� t � |$| � vI� � �4u4¨�z � v �w��ís{� �]� ê ��� |wys{�&v � � ��� |�#w�� �7� w ��� v � s � |z � ¨�zNs �y�P� ê ��� |wys{� �� � � |z � � �K¥ | � ê �X� |wys{�Lw���|z � �&|$vCw ��� ±   �g�q���� ê ��� |wys{��� �e� w �Ö� |z � ° �q����� s � |z �]�7� � } |wys{� � t�t � w } � |wys{�íw���� ��� � � v � � ��� |��w�� � v � �>Äd|w�� �c� vvsqv�±

�Nsqv �K¥>� �ªt �y�q� w � w vzyc{,} w��c� � | } z ���é� x � w����$| w ( y � <,( } � |z � � v �7� w � ��|$s&� � | } z (X� �$sí|z � v � � ��� |�w�� ��e� w �y��� � � | } z�± ¢ ¿ � } �q��� |z � |�� <�(���N� ìX� ���À��� v � w � v � w�� � ° � vIw � �X�y�T� s � � � |$s ��± ¦ ÊS� |#w � w v yC{�} w���� � | } z ���� x � w����| wE� <,( y ( } � |z � �&� � | } z�w��Nx v � x � w����|�� <,( } �q� � � � � w�° � vx � � } �`¢ wÖ± � ± �]¦C±

£ z � sq|z � v#|ɨ�w��$|S|$sª|z�w���� � |�s � v ���y� �Sw��S|z � |�|$sqt�Ä �y� ° ��� t � |$| � vI�X��� � u �q� �$s9z � ° �P�G� s4s �y��� �&Ü{Ó�Ù ÐÅÒ �X� �w��À|z�w�� �N� ìX��wy|w�s{��s �g�ª�e� � } |w�s{�À|z � | � sqvI�9� � � � � �$|$v � } |#° � vI�Iwys{�ís �j� � � � �1� v Ì ���w�x{�2¯4 � > � p � p s ( � v

� p �.� ( � (� p52 ( � q�v

'�sq| � |z � | � � � ê �N� � } � s � x ��� v � �T� � u ��� t�vs@°,w �����&� sqv�|z � � � � � t � |$| � vI� ñ1� ��¨�wy|zUt � |$| � vI�X� � |z � u � v �� ° �q����� | ��� |$sqt�Ä � s\¨�� ��� � � |z � ìXvI�$|S|z � | � ° �q����� | � ��|$s �*=���7 v � � ��� |��w�� � � � }�} � �� �e��� � � | } z2±��� . �2�]QTS2� £�¢A���A¢C� Q�¢/-A��Q �P���A���.- QTS6� [z�R[ QTS2¢]Q�¢�I¢C���e��� 0HZ2¤��10.�"� Q�¢]Q ����� 0.��-�S Qz¡"� 0HZ6¤��XQ �"¤$��£ � ¡"�A��[�Q £  2¡XQ 3 � 3 ��£�¢]QTS6� £�QTSI¢C�£ ���  �[ �+QTS6����¢�¤� 2����� � ��-�0P¢]Q ¡2S2�"��¢/-A¢�����[�Q0¥

Page 17: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ��� ���x��� � ��� � �\ï

��0 / � � � � :;=@6TG

£ z � t � |$| � vI�>ÄÉ� � | } z�w��Nx[v ���y� � } � �×z � ° � � ��� | �y�í� H � } |�`s{��|z � � ��� �Xw��Nx¾s �c�e� � } |wys{����±��Nsqv �K¥>� �9t �y�q�} s{���w �N� v�|z�w�� ��� ìX��wy|wys{�©s ��()3�587 ¯(83I587 ( � � w }(83I587 � w } � w }(83I587 � ~ p - p 4 � � p -�(83I587 ~ � q�v,� p 4

� � � |zXw���� � wyx{z4| � u � wGH � v � ��|�° � vC�wys{� ¢ |z � ìXvI�$|�ç � ê ��� |wys{����z � ° �P�1��� �ív � ° � vI� ��� ¦C¯(83I587 v � w } � w }(83I587 v ( � � w }(83I587 v � ~ p - p 4 � � p -�(83I587 v ~"� q�v*� p 4

'�s\¨ ��sq| � |z �P� s ��� s@¨�w��NxN¯(83�5)7 ( � <,( % w }(83�5)7 v ( � <,( % �

(83�5)7 � <,( w } % �

(83�5)7 v � <,( w } % w }ò � � ��� |z � | ()3�587 w�� � �ªsqv ���N� ìX� ����¡ ¨�w�|zUv � �$t � } |�|$s&wy|�P� � } s{� �b� vIx � � � �4| � ¨�z � v ��� � ()3�587 v w����ªsqv ��N� ìX� ��� ¨�wy|z¤v � �$t � } |P|$sUwy|��ì�vI�|�±   |Pw�� � w&J } ��� |�|$sL� � ubw��¤|z�w�� } � � � ¨�z�w } z �N� ìX�Xwy|wys{�¤w�� �1� |$| � v�± ��� �$|v � � � � �1� v�|z � |cw�� } � v| � w�� � t�t � w } � |w�s{��� � wy|T� � uL� � �q����� wGH � v � � } � ± ¢e£ z � È,| � � ��� v �L� v �������N� w�� } �����N� ��9�N� ì��wy|wys{� } sqvv � �t�s{� � w��Nx�|$s (83I587 ± ¦

��0�� � I�G�� ��=V<>GLI I AT4 �VI

�j� |$| � vI�¾� � | } z�w��Nx©t�vs@°,w �N� � � ¨ � u§|$s �$� w��$t � | } z } s{��|$vIs ��¡À�X� � ��� s{�b�$|$v � } | � v �q� t�vsqt � v|w � ��s �!� ° �q���N� ±  ��� � �4u } wyv } � �9�$| � � } � ��¨ �§� s{� Ì |�¨�w��z�|$s �N� ì� �L� DCÓ>ÎÔ\ÏeÕeÑ Î � ° � vu~|w�� � ¨ � � ����� |$s � sé|z�w�� ���X� |�$s �7� v©¨ � z � ° � s{� � u½�zNs@¨���z�s\¨ |$s � s[t � |$| � vC��� � | } z�w��Nx^w�� �7� � } |wys{� �N� ì��wy|wys{����± ��� � �q�����ÖÌ �§ÔCÙMâ�ããcdeBÐãBâIâBÕeÑqÎ~t�vs@°,w ��� � � ¨ � u�|$s^�$s � ° � |z�w���t�vs ��y� �í±   � �N�����2� |z � � ��� ��w��Nx[s � t � |$| � vI� � � | } z�w��Nx^w���e� � } |wys{� �N� ìX��wy|w�s{����w��]�t � } w�ì ��� w��¾|z � ¿ � t1sqv|]w��é| � vI�9��s � } � � ���K¥ t�v � �I�wys{��� � ¨�z�w } z � v � } s{���w �N� v ����ªsqv � t�vIw��9w�|wy° � ±   �ít � vI|w } ����� v �N�G�e� � } |wys{� ��� ìX��wy|wys{�©s � |z �P� sqvI�í¯

* B���� ��� B ��� �¤ã�����* B � ��� B � �bã�

¨�z � v ����� } zlB� ]w�� � t � |$| � vI� � w���� � � � �4|w } �q��� u � ê � wy° �q�y� ��|S|$sN¯

* p`v p){�����p 5 � � 3)4�7 ~ p`vzy ���)y p 5 � < * ~�B��� � ��� � B ���1�tq*s ã�����~�B � � ��� � B �1� q1s ã

¨�z � v � |z � p � � v � � � ¨ w �N� �4|wyì � vC��± ¢ ��sqv � �ªsqv � x � � � v �q� |$v � ��� ��� |wys{�©|z � |�w�� } �����N� �!x ��� v � � � � ���R@ ÂN±èÂN± ç,± ¦�Nsqv �K¥>� �ªt �y�q� |z �]�N� ì��wy|wys{�©s ��()3�587 x{wy° � � ��� v � w � v#w�� � ê � wy° �q�y� �4|�|$sN¯

Page 18: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

��î � ��� ��n����������8�!��� [����� �`�� P �� ����� �� %����!"� �

(83I587 � ��4 � � 384I7 ~ � y ��4 � < *~ ( y � � q1s w }~ � y w }�� q1s w }~"� y"p - p 4 � q1s p -l(83�5)7 ~"� q�v*�Xp 4

� t1s{w��4|/�Nsq|¬� �q������� v � w � v¬w��g|z � | �,� sqv¬|Éu,t � } sqvv � } |� � �� � |z � | u4t � �!s � |z � vIwyx{z4|ÅÄÉz � � � �w �N� �gs �2� } � � ��K¥ t�v � ��w�s{�Gsqv!� � |/s �1� ê ��� |wys{��� } s{�ªt�vIw��Iw��Nx ���e� � } |wys{� �N� ì��wy|wys{�G� � �$| �q���>�1� |z � � � � �qñ �ªsqv � t�v � } w�� ��� u �|z � uí� � �$| �q��� �z � v �P� } s{�9�ªs{�Lt�vIw�� } wyt �q� |Éu,t � ±

£ z � t � |$| � vI�>ÄÉ� � | } z�w��Nxbv ���y� � � sqv } � � �&�K¥ t�v � ��Iwys{��� � v � |z � � � � �&� �9¨ � z � ° � x{wy° � � � sqv �7� � } |wys{��N� ìX�Xwy|wys{��� � �sí|z � v � w��cv ���q��� u¤�Nsq|z�w��Nxí� � ¨�|$s �y��� vI�¾z � v �q� sq|z � v�|z � �b|$sL��sq| � |z � } s{�4° � ��w � � } � |z � |} � � �ª�K¥ t�v � ��Iwys{����sIH � v�±   � �������2� |z � v �qÌ �cs{� �ª� � � s �¬� } � � �ª�K¥ t�v � ��Iwys{�L|z � |Pw����s } s{�`�ªs{�¤|z � |�wy|cz � ��$t � } w �q� �$u>��| �M¥ ¯`|z � ÔIÑqÎÒ ÕeÏeÕeÑ Î�Ù ÚTãcdeBÐãBâIâBÕeÑqÎ�±   � �T� � �q�����Ö� } s{� � wy|wys{� �q�/�K¥ t�v � ��w�s{����z � ° � |z �©�7� �`w � w � v� sqvI�í¯

� * ! F (,'87 � !&# 71984�7 ! �¨�z�w } zíw���v ���q��� u��IzNsqv|ÅÄÉz � � �À� sqv�¯

� 384I7 ! F < * �*=���7 q1s !&#� 31984I7 q1s ! �

�Nvs{� |z�w�� �K¥ t � ���Iwys{�&wy|#�z�s �����À�1� } �y��� v�|z � | ! F � � �$|�z � ° � | u4t �5�)<1<19N�X� � � !&# � � � ! � � � �|�z � ° � |z �� � � �`¢7�� |Ssq|z � v¨�w�� �c� v � wy|$v � vu�¦/|Éu,t � ±   �©sq|z � v#¨*sqv � � � � *�Ä (�'�7 �,Ä 71984�7 ¨�z � �À°>w � ¨ ���í� � �G�7� � } |wys{�Àz � �|Éu,t �5�)<*<�9 q1s 3 q1s 3 q1s 3 ±

��0�� � ���8 3 � � G�<��VI

£ z � v � w���s{� � sq|z � v � w�� � s � t � |$| � vI� �q��� s\¨ ��� w�� �T� � �q����� ±   |�w�� } �q���y���L� Ú Ù��KáiB>ÙqÏÖÏÉãKÐBÎ �1� � � z � ��|z ��� sqvI������ � ±`Ç � %�u§t � |$| � vI��� � v � Õ=ÐBÐãEDBÓ>ÏdÙ �KÚ�ãK¯�� � | } z�w���x � ° �q���N�¤� x � w����$| ����� �T�q� ¨ � u,��� � }�} ����� � � v � x � v �X�y� ��s � ��� � ±!¼Tt � v � |w�s{� �q��� u`�t ��� � w��Nx � w ��� �&w �N� ��|w�ì � v#w�� ��� � w�� ��� | � v �$� � ����¡ s{�í|z � vIwyx{z4|ÅÄÉz � � � ÄÉ�w �N�q� wy|�¨�w ����1�c� s � � � |$sª|z � |#t1sqv|wys{�©s � |z � ° �q���N� |z � |�¨*s ����� v � � ��� |�w �� ¨ � v � |$s9� � }�} � �� �e����� u�� � | } z ��� �B�N� � � �sq|z � v¨�w�� � ±

Ç � %�uªt � |$| � vI��� � v ��� � ���7��� w�� } s{��| �K¥ |�S¨�z � v � w��NìX��w�| �S�X� | � �$|$v � } | � v � � � v ���1� w��Nx �N� ì� ��� v � } � vC�wy° ��� uq±�Nsqv �K¥>� �9t �y�q� w��NìX�Xwy| �í� w��$|� � v �U� � �K¥ } �����y� �4|9° � z�w } �y�&� sqv`¨#vIw�|w��Nx^âCÕ7ÝGÓ>Ú ÙqÏeÕÖÑ ÎËt�vsqxqv � �`� ��� � � w��~|z�w��} s{�4| �K¥ |U|z � w��Nì��wy| �¤� w��$|� � v � s � | � � } �q���y��� âBÏeÐãÙqÝ�âB± r*s{�X�w �N� ví|z � �Iw��ªt �y� } � � � s � �w�� ����� |w��Nx^|z �w��4| � v � } |wys{��� �1� | ¨ ��� � � � � v° � vPt�vs } � �� 4�7�= �)7�=L� � �§� } � w � ��|ct�vIs } � �� � 9 � 7 � (� ¨�z � v � � 9 � 7 � ( � � � � � �� � ê �N� � } � s � Ðã���Ó�ãKâBÏ7â]|$s 4�7�= �)7�=��!� � � 4�7,=��)7�= v � t � w � ��|$s ��� } z^v � ê �N� �$|�¨�wy|zË�$s{� �À� w�� � s � Ð$ãKâ B>ÑqÎNâ�ã�±£ z�w����wy| ��� |wys{�Lw����zNs@¨��ítXw } |$sqvCw �q��� u©w��í�jwyx � v � ç,± ¢ '�sq| � |z � | � 9 � 7 � (©�q� �$s9| � �q� � � �Lw��Xwy|w �q� � � �� � x ��� �� vx � � � ��|�± ¦ �T�w���xÀ�|$v ��� �9�P|$s&�Iw�� �X��� | � |z � � � �� � x � � � ê �N� � } � � � |z �`�T� � �q����� } s �N� } sqvv � �t�s{� � w��Nx©|$s|z�w�� � w � xqv � � w���¯=)7 6 4 � � 9 � 7 � ( � � � (t=)7�4�+ 4=)784�+ 4 � 4�7�= ��7,= =�7 6 4

£ z � � � v � } � vI�w�° ��� ê ��� |w�s{��� � v �]�`� wyv � } | �y�K¥ w } �q� |$v � �X� � wy| � v � |w�s{�Às � |z ��� w � xqv � �í±Ç � | � � �e� v|z � v � �I� � � � |z � |�|z � �$|$v � } | � v � s � |z � � � v° � v � � � } � w � �4| � s,s � �s{� � |z�w��Nx � w �q� |z�w���¯� 9 � 7 � ( � � � ( ~ =)7�4�+P-�=)7�4�+ 4 � � � � � ( - � 9 � 7 � ( ~ � 7 p ( =�7�4�+ � =)784�+ 44�7�= �)7�= ~ =)7 6 -�=�7 6 4 � � +)=�< � 7�414X=)7 6 - 4I7,=��)7,=t=)7 6 4

Page 19: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ��� �,����� � �!�8�2� ���� ���

��w�x � v � ç,¯*r � w � ��|ÅÄ È � v° � vTÈ>w�� ����� |w�s{�

¨�z � v � ¨ �©� �� � � � |z � | � 7 p ( w�� �L�7� � } |wys{�b|z � | � x{wy° � � � v � �$t1s{��� �`� vs{� |z � � � vI° � v ����� | � vI�9w�� � �]|z �� �K¥ |`v � ê �N� �$| ��� � � +�=)< � 7�4*4 w�� �é�7� � } |wys{�½|z � |�t�vs } � �� � � � v � ê �N� �$| � vs{� |z � } � w � �4| � v � | � vI�Xw��Nx � �� t�t�vIsqt�vIw � | � v � �$t1s{��� � ±�T� � sqv| � � � | ��� u � |z�w���t�vsqxqv � � z � � � � � vIwys � ��t�vs ��y� �í¯�wy|�¨�w ��� �Nsq|�t�vs ��� } �!� ��uPs � |$t � | �j£ z � tXvs �X�y� �

w��l|z � |�� 9 � 7 � (�q� � � � ��� w��]|z � v � } � vI�wy° � � � |$|w��NxTs �)=)7 6 4�� � �i=)7�4�+ 4��q� |$| � �ªt�|� � � � | } z�s{��|z � v � �$t1s{��� �� w��| �1��� sqv � wy|Pz � �]� �N� �9w�|$| ��� w�|��ì�vI�$|cv � ê �N� �$| �   �¤sq|z � v�¨!sqv � � � |z � t � |$| � vI�é� � | } z�w��Nx&w�� ��� w��Nx � s{� �� |$s,s ��� v � uq± ¡ ¼c� � ¨ � uÀ|$s9ì ¥ |z�w���w��#|$s9v ���N� ìX� � � 9 � 7 � (©� � � s ��� s@¨���¯� 9 � 7 � ( � � � ( =�7�4�+`4 � � � � ( - � 9 � 7 � ( ~"� 7 p ( ~ '�713��t=�7�4�+ 4 �*� ~ ()3 � 9N=)7�4�+ 4 �

�T� |zNs � x{z�¨!sqv �M� �X���q� |zXw��!�s ��� |wys{� � s � �S�Nsq|Sv ���q�À� �*¨ ������ �*|z � |Sx{wy° � � ��� v � w � v�± � �1� |$| � v��$s ��� |wys{�©w��!|$s� � �P�`��� %�u�t � |$| � vI�2¯� 9 � 7 � ( � � � ( � ~ =)784�+.-�=)784�+`4 � � � � � ( - � 9 � 7 � ( ~"� 7 p (t=)7�4�+ � =�7�4�+ 4

Ê*� } �q� � �¾��� %�u�t � |$| � vI��� � v � wyvIv ���7� | � �X�y�q� |z � � � | } z ¨�w ��� w��9� ��� w � | ��� u½� � }�} �����2�c�q��� s@¨�w��Nx[|z � w���wy|w �q�v � ê �N� �$|c|$s �1�§� � �N� �9wy|$| ���X¡>� w��§| � vI� �q��� s@¨�w��Nx©|z � ì�vI�$|Tv � �$t1s{��� � |$s �1� x � � � v � | ���2ñ |z �G� �Nx{w�� � w��c�Ns@¨� t�vIw�� ����¡>�N� � � |z � v � } � vI�w�s{�À| � �q� � } � v � s � |z � v � �$|�±

� � � � �K¥N� �ªt ��� s � |z�w���t�vsqxqv � � w�� � } |wys{� � w � ¨ �]�N� ìX� � ¯� � � ( � (� 7 p ( =)784�+ � =)7�4�++)=�< � 78414 =�7 6 � =)7 6 u`v

|z � �í¨ � � ��� |z � |�¯(83I587 v (t=)7 6 4 % w ( y�vzyc{�yc|�y0�;y k y ;y87;y:9�y:;,}

� � � �Nsq|z � v �K¥N� �ªt �y� s � |z ��� � � s ���� %�uPt � |$| � vI��� � } s{���w �N� v�|z ���N� ìX�Xwy|wys{�Ps � ��w � s{� � }�} w�x{wy° � � ��� v � w � v�¯* � � � v - v - w 3 u � � ~ 3 y � � 21q�� � + * � � ~ ()3 � 9 * � � � }

ò � �`wyx{z�|�|$vIu�v � ¨�vIwy|w��Nx�|z�w�� � �w��Nx � � � �$Ädt � |$| � vI�2¯* � � � ~ v -�( * � � � � v - v - w 3 u � � ~ 3 y � � 21q�� � + * � � ( * � � }

£ z�w��S° � vI�wys{�Ls � * � �íz � ��|z �©¢ �I� �q��� ¦ �q� ° � �4| � x � s � �Nsq| � �w��Nx (83 � 9 s{�&|z � vCwyx{z�|ÅÄÉz � � � �w ���q� �w�� } � w�|�w��� ° � w ��� ��y� w�� �$�N� �$|$v � } | � v ����¡G� sqvI��s{�&|z �]�y��� |ÅÄÉz � � � �w �N��� � ( * � ��±

Á £ zXw�� � w�� � s �l� ê ��� |wys{�Àw�� } �q���y���À� B>ÙqÏÖÏÉãKÐBÎ �KÕ7ÎÒ Õ7Î4Ü �1� } �q� � � wy|Sw�� � |$sqtNÄ ��� ° ���1� ê ��� |w�s{�©w��`¨�zXw } z�|z �� �4|wyv �`�y��� |ÅÄÉz � � � �w �N� w�� � t � |$| � vI� ñ wÖ± � ± � sq|z * � � � � � ( * � � ��� } s{� �`� s � � � ¨�w�|z�w��¤|z � � } sqt � s � |z ��N� } ��� v � |wys{�2± Ã

Page 20: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç � � ��� ��n����������8�!��� [����� �`�� P �� ����� �� %����!"� �

'�s\¨ �g� �Iw��Nxí|z � � � � � v ��� �$s{��w��Nx � � ��� v � w � v � ¨ � �z�s �����b�1�`�y��� |$s �1��� w � ° � |z � |]|z�w��Pt�vsqxqv � ��¨�w ����Nsq|Sx � � � v � | ��� ��u©s � |$t � |�±¬r � vIwys � � � u � zNs@¨ � ° � v � wy|�Ò{Ñ\ãBâ �X� � � |z � v ��� �s{�íw��S�w��ªt ��� ¯jw�� �T� � �q�����Ö� t � |$| � vI�� w�� � w��Nx{� � v �P� �� � � ��� |$s`z � ° �]� �&w��ªt � w } wy| � w�� � vs{�4|�s � |z � � � v ���� } |w��Nxª|z � �ªs{�$| } s{�9�9s{� �1� z � °>wysqv�K¥ t � } | ��� s � t � |$| � vI� � w�� � w��Nx{� �4� � �À� °qs{w � w��Nx��s{� �T� ��s{� �q� s � �S�wy| �X� |wys{���*¨�z�w } z � v �T�1� uqs{� � |z � � } sqt �s � |z�w��¬| � |$sqvIw �q� ± £ z � �¬¨ � � ��� |z � | ��� %�uªt � |$| � vI���!t ��� u � �©w��ªt1sqv| � �4|/vs �y� w�� �T� � �q�����Ö� w � s{� � uªw��9t � w } wy| � uq±

��0�� � G ��A�C 6 ��C�4�=VA ��� � � � GLI � G � ��4�<�: I

  |Sw��¬s � | � � �N� �wyv � �X�y� |$s } v ��� | �P� � � �$| ��� � } sqt � ¨�wy|z�w�� � � �K¥ t�v � ��wys{� �,� sqv*|z � t � vt1s{� � s � } v ��� |w��Nx � s } �q�� w�� � w��Nx{�S�Nsq|�� ��� � ��� � � ¨�z � v �A� wÖ± � ±*�$s{� ��� w�� � s �c�Å�� s } � ÄÉ�|$v � } | � vIw��Nx ¡G� sqvC�í±   � �T� � �q����� |z � v �]� v � |ɨ*s¨ � u>�#|$s � } z�w � ° � |zXw���¯

� �-��� �&%��.��� � � ��"�� � �T� � �q�����ÖÌ �©Ú�ã�Ï]ãCdABÐãBâCâCÕÖÑ ÎNâ � v �À� � ���7�X� ¨�z � � � ° � v � � � �| ��� � � |�s ��� w�� � w��Nx{�Pw���v � Äê � wyv ��� ± � � � �w��ªt �y�T�K¥>� �9t �y�q� } s{���Iw �N� v�¯9*7�( � � 3�� �

* p ��~ p1u � � / �� � * � u * �

£ z � � � |Gs �#� w�� � w��Nx{� } v ��� | ���^� u � 9,7,(b�K¥ t�v � ��w�s{�[w���ÝGÓNÏeÓNÙqÚ=Ú á¤Ð$ãIÔ�Ó>ÐIâBÕ f ã �¬� � � t � |$| � vC� � w�� � w���x{� � v �|$v ��� | ���[� � ��� %�u§t � |$| � vI��� ¢ wÖ± � ±ª|z � u } � vvu � �¾w��9t � w } wy| � ¦C± £ z � s{� � u � w�� � s ���N� } ��� v � |wys{�X�ct � vC�9wy|$| ���� v � Ïeá�BNã]âBÕ Ü{ÎÙqÏeÓ>ÐãBâ � DCÓ>ÎÔ\ÏeÕeÑqÎ ��Õ=Î�Ò Õ=Î,Ü â �� � � B>ÙqÏÖÏÉã�ÐCÎ ��Õ=Î�Ò Õ=Î,Ü âC±

����� � � % ��� � � � È,s{� � |w�� � ��w�|cw�� } s{��° � ��w � ��|�|$s&� } sqt �ª� w�� � w��Nx{��s\° � v�� � ° � v �q� x ��� v �����¤� ê ��� |w�s{��� �¨�z�w } zÀv � ê � wyv � � ��� K>ãKÐãGÔ�ÚyÙ Ó,â�ã�¯

* p � � � s � � :1:*:� � � � � � :1:*:� � 2 � � :1:*:

� '87,=�7 � � p � p'�sq| � |z � |�|z�w�� } � �X�Nsq| �1�c� s{� � ¨�wy|z �V9,7,(`�K¥ t�v � �I�wys{� � ¨�z�w } z©s{� � u©� } sqt � �Ss\° � v�|z ���K¥ t�v � ��wys{�©¨�z�w } zwy| � � } � s{� � ��± � � '87,=)7 } ���q� � � w��*s{� � u �q��� s\¨ ���í� |�|z � |$sqt �y� ° ��� s ��� � � |Ss �l� ê ��� |wys{���Ssqv } � � ���K¥ t�v � �I�wys{�2±£ z � � � � � t�vIsqt � vI|w � � � � � } s{���$|$v � w��4|��s{� � w�� � w��Nx{�lw�� 9*7�(]�K¥ t�v � ��wys{��� � t�t � uP|$sc|zNs{� � w�� � '�7,=�7 } ���q� � � ��±

£ z � � � | ¨!s � sqvI�9��s � � � �$| ��� � } sqt � � ��� � ° � vuL�Iw��9w ��� v �N�X� |�v � � � � �1� vT|z � | �[9*7�(í�K¥ t�v � ��Iwys{�Lw�� � �ãcdeBÐãBâIâBÕeÑqÎ � ¨�z � v ��� � � � '�7,=�7 } ���q� � � w��/�Nsq| � w�|¬w��gt � vI|/s � |z � �$u>�4| �M¥ s ���e� � } |w�s{� �N� } ��� v � |w�s{��� � � � } � � ��K¥ t�v � ��w�s{����±

��0�� � �874 � �

£ z � v ���q��� v�� � uÀz � ° �P�1��� �À¨!s{� ��� vIw��NxGzNs\¨ wy|�w��S|z � | �T� � �q����� t�vIsqxqv � �9� � °qs{w � |z �P� � � s � � � �9w } s � s{��� �sqv��s{� � sq|z � v � w�� � s � | � vC�9w�� � |$sqv � |$sU� � v � |z �9� � � s �S� ê ��� |wys{��� ���N� } ��� v � |w�s{��� �l� | } ±À�Nsqv �K¥>� �9t �y�q�} s{���w �N� v�|z�w�� 9*7,(`�K¥ t�v � ��w�s{� � vs{� |z �]��� �$|#� � } |wys{�2¯9*7�( � � 3�� �

* p ��~ p1u � � / �� � * � u * �

Page 21: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç �

� s\¨ � s � ��|z � t � vI� � v � �Ns@¨ �Nsq|�|$s�t � vI� � |z�w�� � ��¯9*7�( � � 3�� � *p ��~ p1u � � / �

� � * � u * �"

£ z �`� ���$¨ � v]w���|z � | �T� � �q�����¬� � � � � | ¨!s Ä � w�� � ���wys{� �q� �$u>��| �M¥ } �q������� Ú ÙqáqÑqÓ>Ϭ|z � | � �� � ��|w �q��� uUv ��� w � �s{� �N� } ��� v � |wys{�X� �1� w��Nx �$� w�� ���¾� tËw�� } s ��� �`����± ¡   �é|z ��� � s@° �`�K¥N� �ªt �y�q� �Nsq| � |z � | �¾� � � * ��� x{w��¾w��|z � � � � � } s ��� �9��± £ z � v ���y� � � sqv ��� uqs � | � v � �$t �����y��� s � |Tw�� �N� | � w � w��L|z � ¿ � t1sqv| ¢�@ ç,± ï4��@IÊ ± ë{¦ �2�X� |Tw��t�v � } |w } �q�X� � � s �g��� uqs � |�w��Sv � |z � v�w��4| � wy|wy° � ± ��� �$|�v � � � � �1� v�|ɨ*s`|z�w��Nx{��¯

�jwyvI�| � |z � � �K¥ | } z � v � } | � v � s ��� s\¨�w��Nx � �4uLs � |z �ª�q� u,¨!sqv � � � '87,=�7N��9,7,(X� sqv < *Uw��c¨�z � | �N� | � vI�`w�� � �|z � �$| � v|w���x } s ��� �`� � sqv�|z ���N� } ��� v � |wys{����w��¾|z � ¨�z � v �q�j��� | � sqv } � � �À�K¥ t�v � ��Iwys{� �1� w��NxL¨#vIwy|$| � � ¢ |z �v �������q� �$s � t�t � w � ��|$s � '87,=)7À� � ��� w��U|z � } ��� �� � � � w����$| � � } �G�N� } ��� v � |wys{���T|$s ��� w��4|$vs ��� } ��� w��¤È � } |wys{�#{¦C± £ z � �#¨ � } � � �1� x{w��&|z ���N� } ��� v � |wys{����s{�§|z � � � � ��� w�� �]� �T|z ���q� u4¨*sqv �2� |z � � �K¥ | � w�� �q�X� | } ± ¢e£ z ���<9�q� u,¨!sqv �2� |$s �1�P� w�� } � �� ���À��� | � v ��q� �$s � � � � ��� uqs � |C¦C±

È � } s{� �2�{®� �$| �1� � � v � |z � |T|z � �$| � v|w���x } s ��� �`�Uw�� �7� v|z � vT|$s�|z � vIwyx{z4|�|z � �U|z � �$| � vI|w��Nx } s ��� �9�� ��$s } w � | ��� ¨�wy|zÀ|z � w��9� ��� w � | ��� u`� � vvs � � � w��Nx } ���q� � �9¢ sq|z � v¨�w�� � wy|�¨*s �����©�1��� � � w�x � s � �C¦C± £ z �í� | � v$Ä�9w�� � |wys{� ¡ s �2�P�N� } ��� v � |w�s{�ªz � t�t � ���j¨�z � �ª�s{� � |z�w��Nx � tXt ��� vC� � |/sqv/|$sP|z ���y��� |gs � |z � �$| � v|w��Nx } s ��� �9�� ��$s } w � | ��� ¨�wy|zÀ|z � | � w�� � w���x � sqvI�í± F0F

Ç � uqs � |]w�� � } | �X�q��� uU�IzNsqv|z � � �U� sqv � ��ãcdAB�Ú ÕÖÔ�ÕeÏjxqvs � tXw��Nx©� � } z � ��w��� � ¨�z�w } z �N� � � v° � �P� � ��|wys{� �1� Ä} �q� � � wy| } � � �1��� � ���e���2� � ��� v } � v| � w�� } wyv } � �9�$| � � } � ��± £ z �Z9*7�(©�K¥>� �9t �y�P� � s\° � w�� � ê � wy° �q��� ��|�|$sN¯9*7�( � � � 3�� �

� * p � ~ p1u � � / ��

� � * � u * �'�sq| � |z �]�K¥ t � w } wy| } � v � u � v � } � � � � � � � �9w } s � s{����±�¼c� � ¨ � u&w��í¨�z�w } zí|z�w�� �K¥ t � w } wy|#�Nsq| � |w�s{�Lw�� � � ���7�X� w��¨�z � �í�9sqv � |z � �ís{� �]�N� } ��� v � |w�s{�&w�� �N� �w�v ��� s{� �9� w�� �qñ>� sqv �K¥N� �ªt ���q� |z�w��#w�� � ° �q� w ���K¥ t�v � �I�wys{�2¯9*7�( � � 3�� � � � � 31/ �

* p ��~ p1u � � / �� � * � u * �

�Nsqv � �Nsq|z � v �K¥N� �ªt ��� s � |z �]�K¥ t � �X�wys{�Às �g��� uqs � |�w��4|$s �K¥ t � w } wy| �N��� w��`wy| � vI� � � ��� @ ç,± ï ±£ z �`� � � s �#��� uqs � |�xqv ��� | � ubv ����� } � �P|z � �u,�4| � } |w }©} ��� |$| � v � �I�$s } w � | ��� ¨�w�|z �N� } ��� v � |w�s{� � w��|� � |z � �

� ��z � � } w��NxGv ���q��� � w � wy|Éuq±   |#w�� ��� �u©|$s �y��� vI� ��� � � w�|� � � � w�� � � } s � v � x ��� ±

� UXW Y�Q � OcM.S�S�Q�S M#´G¸^]���Q/¶zOI·�M�¸9»I´��

£ z � v � w���s{� � ìX� �q�2�7��� | � v � s �g�T� � �q�����ÖÌ ��|Éu,t � �$u>�$| � � |z � |�� � |�Twy| � t � v| � vs{� sq|z � v�tXvsqxqv � �9�9w��Nx ��� �>Äx ��� x � ��± £ z �#� w�� � s � t1s � u>�ªsqvtXzXw����|z � |*¨ � z � ° � | �q�y�q���©� � s � |¬�$s �e� v!w�� } s{�9�ªs{� � u } �q���y��� BNÙ ÐÅÙqÝ9ã�ÏeÐCÕÖÔt1s � u>�ªsqvtXz�w���í± £ z � v � w�� � �Nsq|z � v � w�� � } �q���y��� Ù{Ò K,Ñ�Ô]t1s � u>�ªsqvtXz�w��� ����� |$| � v � �Ns@¨�� � �©Ñ f ã�ÐCÚyÑ�Ù{Ò Õ7Î4Ü{±��� v �]� v � �s{� ���K¥>� �9t �y� ��s � Ù{Ò K,Ñ�Ô�t1s � u>�ªsqvtXzXw���í¯� � ��¢ [ �e� ¤ ¤�����[ � £ �A�\[JQTS6� ¡ �A� �e�"� Q ���A�HQTSI¢�QJQ�¢C��[`¡ �A 2� Q�¢ [����6¤ ¢C� �$[#" QTS� �[�¡0¢C£ � 0� �[�Q�����Q�¢ �A�"�HW�S2�"�. �[ � ��-�¢C�P�0�6� Q ��£JW�S2��¡2S

0P¢"�P�A��[ � £ �e��[ � 0.���]QTS2� £z¡ �A� �e�"� Q ���A�,¥

Page 22: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

çqç � ���� � ��� � 8��[����������� ����������!"� �

� £ z �P� wy| � v �q� � v � { ��� | } ± � v � s � | � � � � ��� |$s9v � t�v � � � ��| � sq|zÀì ¥>���&� � �í� v � wy|$v � vu�t�v � } w��Iwys{�Àw���| � x � vC��±

� ' � � � vCw } sqt � v � |$sqvI�#� � } z � � u � v � s � | � � ��� ìX� ��� |$s9¨*sqv � s{�&� � �4u � wGH � v � ��| � w�� � �!s � � � � ��� vC��±

� £ z �#� ê ���q� wy| u�sqt � v � |$sqv ¢ �.�Gw�� �T� � �q����� ¦ � � ���q��� u]¨*sqv � �/s{�`� � � �1� vI� � � � � � ��uGsq|z � v ¢7�X� |/�Nsq| �q��� ¦| u4t � ��±

'�sq| � |z � |�|z � � � s@° � v � s �q�N���í�1� z � °,w�sqvI� � v �P� wGH � v � �4| � sqv ��� } zí| u4t �`¢ w�� �e� } |�|z �c�1� z � °>wysqv#w��S�$s{� � |w�� � �� � ��� ìX� ���2� sqv � vvsqvK¦ � ¨�z � v ��� �!w��9t � v � � � |$vIw } t1s � u>�ªsqvtz�w��� |z � |Éu,t � |$v �X� u � s � �!�Nsq|S� � |$| � v ¢ * = � � >�7N�� sqv �K¥N� �ªt �y�q� v ���q��� u � s � �� Ì | } � v � ¨�z � | � w�� � s �1���y� � � ��|� � v �#� s � � � w��ª|z ���y��� ° � �¬s ��� |$v ��� ¦C±   � ��� � �q�����Ö�Ïeá�BNãªÔ�Ú ÙMâCâ�ãKâ*t�vIs\°>w �N��� �$|$v � } | � v ��� ¨ � uí|$s } s{�4|$vs � Ù�Ò K>Ñ�Ô#t1s � u>�ªsqvtz�w��� � sqv�s@° � v � s �q� w���xN±

Ç � | Ì �¬�$| � v|¬¨�wy|z � �w��ªt �y�q�q�X� |jw��ªt1sqv| � ��| ���K¥>� �ªt �y� ¯ � ê ���q� w�|Éuq± £ z � v �#� v � � � �4u�| u4t � � � sqv/¨�zXw } zG¨ �¨*s �����ª� w �q��� ê ���q� w�|Éu �N� ìX� ���2���X� |/�$s{� ��� sqv/¨�z�w } zG¨ � ¨*s ����� ��sq|�±j��sqv �K¥N� �ªt �y�q� } s{�ªt � vIw���x�|z ��� ê �X�q� wy|Éus �1�7� � } |wys{���/w��gx � � � v �q��� u } s{���Iw �N� v ��� } s{�9t � | � |wys{� �q��� u�w���|$v � } | � ��y�q� ¨�z � v ��� �g¨ � s � | � �`¨ � �4|¬|$s } s{�ªt � v �|ɨ*s � w��$|� � sqv � ê ���q� wy| uq± F # £ sÀz�wyx{z � wyx{z4|#|z � w��� �N�q� } s{���w �N� v�|z�w�� �N� ìX��w�|wys{�ís � |z ���7� � } |wys{� 7�9*7 � ¨�z�w } z| � �$|� � sqv�� � � �1� vI�zXwytíw�� �9� w��|�¯p�� 7�9,7 � � w } ��� 319)4�7p�� 7�9,7 � � ~ ��- ��4 � � p � � � � � ~ p�� 7�9,7 � � ��4 �

Á �NsqvP|z � �|Éu � w��$|w } v ��� �$s{�¤¨ �9� w�� } � �� ��� w��bÈ � } |wys{�¾ë,± � � ¨ � z � ° � } zNs{� � �b|$s �N� ì� �\719*7 � w��§w��Nì ¥&� sqvI�í±� � � � � � �/� v � |z � w��Nì ¥ sqt � v � |$sqvI� � sqv � ê ���q� wy|Éu � � �&� sqx{w } �q� sqv � v � �$t � } |wy° ��� uq± à ��| � w�|wy° ��� uG�$t ��� � w���x � |z � | u4t � s � 719*7 �[� s � x{z4| ¡ |$s �1� ¯ 3 q1s w 3 })q1s �)<*<�9 ± ÊS� |/|z�w��¬¨!s �X��� w��ªt � u]|z � | � �z � �*|Éu,t ��3 q*s 3 q*s ��<1<�9,�4� ° � �À|z�s � x{z`¨ �¬®$� �|*� � w � |z � |S¨ �T� s{� Ì | �K¥ t � } |@� �G|$s ���T�N� ìX� ���`� sqv �q��� |Éu,t � ��±

� � v|z � vI�ªsqv �q�*� �ª¨ � z � ° � �Nsq| ���½��� v � w � v �/� ° � ��w � � �¾¨ � v �L��� ìX� ��� s{� �q��� | u4t � � � } s{�ªt � vIw��Nxb|ɨ*s� w��|� � sqv � ê ���q� wy| uLw��T° � vu � wGH � v � ��| � vs{� } s{�ªt � vIw��NxÀ|ɨ*s&w���| � x � vC��±   �¤|z�w��c� � ��� �q� ¨ �ª�K¥ t � } | � �&|$s �1�Ñ f ãKÐBÚ Ñ�Ù�Ò�ãÒ�|$s } � vvIu©s{�&|z � � � ° � vIwys � �S| � � � ��±

� á�BNã`Ô�Ú Ù âIâ�ãKâ } s{�4° � ��w � �4| � uU�$s � ° ��� sq|z§s � |z � � � tXvs �X�y� �9��± £ z � u �q��� s@¨ � ��|$s �N� } ��� v � ¨�z�w } zU|Éu,t � �� v � Õ=ÎNâKÏdÙ ÎÔBãBâ/s � ¨�z�w } z } ��� �I� �,� � � |$s]tXvs\°>w �N����� ìX��wy|wys{�X�js � |z � s@° � v � s �q�N��� Ñ�BNã�ÐÅÙqÏeÕÖÑ ÎNâ � ��$s } w � | ��� ¨�wy|z� } ��� �I��±/�Nsqv �K¥N� �ªt ���q�X�y� | Ì � �N� ì� �P� |Éu,t � } ��� �� } s{�4| � w���w��Nx � � � ê ���q� wy| u�sqt � v � |$sqv�¯� 9*38414�� 6 3 � '87,=)7~]� � � -1- 3 q1s 3 q*s �)<1<19

��� v ��� 6 w��P|z � � � � � s � |z � } ��� �� �1� w���x ��� ìX� ���2�l� � � � �Uw��c|z � �w��Nx ��� sqt � v � |wys{�¾w��¤|z � } ��� ���± £ z�w���N� } ��� v � |wys{�9� � u �1� v ���q�¾�$� |Éu,t ��3 w�� � �9w����$| � � } � s � |z � } ��� �� � 6 w � |z � v � w�� � � ¢ s@° � v � s �q�N��� ¦jsqt � v � |wys{�� � � s � |z ��� t�t�vsqt�vCw � | � |Éu,t �q����� ìX� ��� s{�íwy|�± ¡~¢ '�sq| � |z � | � �9w��Ss{� � u �N� ìX� ��� s{�ít � wyvI�*s � s �>®$� } |��s � |z �� � � � |Éu,t � ± ¦

£ z � } s{�X�$|$v � w��4|c|z � | � |Éu,t �V3 � � �| �1�G� �bw����$| � � } � s � |z � } ��� �� � 6 w��T¨#vIw�|$| � � � 6 3 ± £ z � � � 6 3w����Nsq| � | u4t �©�K¥ t�v � ��wys{� �j�X� |]v � |z � vªwy| �K¥ tXv � �� � � � } s{���$|$v � w��4|�s{� � |Éu,t �q�/� � � w�� } �q���y���[� ÔCÑ ÎXÏÉãcd�Ïe±r*s{�4| �K¥ |� � v � t ��� } ���[� |�|z �©� vs{�4|�s � |Éu,t �©�K¥ t�v � ��w�s{����±L�Nsqv �K¥N� �ªt �y�q� |z ��� H � } |Gs � |z ��� � s@° � } ��� ���N� } ��� v � |wys{�&w��S|$s � �I�wyx{�í|z �]� s ��� s\¨�w���x�| u4t � |$s � �¯~]�.� � -1- ~ � 6 3 � � s 3 q1s 3 q1s ��<1<�9� O + S6� �����I� � U����� I¢�¤�� Q � W`�.¢c£ ��£ �XUG��£ £ � ��- Q � S2� £ � �R[ , ��¢�¤� 2� ���� I¢�¤�� Q � � /�¢��I����Z�Z���[ �0� Q � QTS2� , Z��A��� Q � £;���� I¢C¤��RQ ��/ U �A 2�2���

UG�C£��XY6¢ 0HZ2¤�����Wz� QTS��e¢ ��¢�� [ ;0; ¥ � �A��� Q � £����� 2¢�¤�� Q ���R[ �2�]Q�£ �XU � £ �"� Q � ¢�¤�¤$� Q £�¢���[9ZI¢C£ � �$Q ��¢��I� QTS� �[������\[��6� Q [ � Q W`� ¤ ¤1� ��¢HZ6 6£ �"¤$�UG 6�2¡XQ �����I¢�¤*¤ ¢��.-� I¢ -A�A¥

Page 23: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

çqë

£ z�w����IzNs �������1� v ���q�2��� �Nsqv � ° � vIu�| u4t ��3 |z � |/w�� � �ªw����$| � � } � s � |z � } ��� �� � 6 � �.�Pz � �j|Éu,t ��3 q1s 3 q*s �)<*<�9M¡ ±£ z�w��/w��/|z � | u4t � |z � |!¨*s �����ª�1�T� � ���9� sqv �.�ªw��9|z ��7�9*7 �`�K¥>� �9t �y�q�>� � � w�� �N����� |z � } s{���$|$v � w���|*w��ªt1s{� ���� u�|z � } s{��| �K¥ |�t�vIsqt � x � | � �#|$s�|z � t�vIw�� } wyt �q� |Éu,t �]� sqv 7�9*7 � ¯7�9,7 � -1- ~ � 6 3 � � s 3 q1s w 3 }rq1s �)<*<�9

£ z�w��#w���v ���q���!� �Nsqv � ° � vuí|Éu,t �R3 |z � |Tw�� � �Lw����$| � � } � s � |z � } ��� �� � 6 ��7�9,7 � z � �#| u4t �R3 q1s w 3 })q1s �)<*<�9@¡ ±£ z�w���w�� ®� �$|c¨�z � |c¨ � ¨ � �4| � wy| �K¥ t�v � �� � �c|z �G�7� } |�|z � | 7�9*7 � w�����sq| ��� ìX� ��� s{� �q��� |Éu,t � � �,®$� �$|�|z�s{� �� sqv#¨�z�w } zÀ¨ �]� �Ns@¨ zNs@¨ |$s } s{�ªt � v �P���y� � � �4|� � sqv � ê ���q� wy| uq±

È,s �e� v*�$s�xqs,s � ± ÊS� |SzNs@¨ � s�¨ � �$t � } w � uG¨�z�w } z`| u4t � � � v � w����$| � � } � �*s � |z � } ��� �� � 6 �N� � � |z �c� } | ���q��1� z � °>wysqv�s � � �`s{� ��� } zLs � |zNs{� � |Éu,t � �#" £ zXw���w�� � s{� � ¨�wy|z � �bÕ7ÎNâBÏdÙqÎÔCãGÒ�ãIÔ�ÚyÙ Ð$ÙqÏeÕeÑqÎ�±��Nsqv �K¥N� �ªt �y� ¯� � 42(83 �`� 7 � 6 ��� ()7,>�7�= � '87,=)7p � � � � p�� � � (�7*>�7�= � 6 � �

£ z �§�N� ìX��w�|wys{�^s � � �Ëw�� } �q���y����� Ý`ã�Ï K,Ñ�Ò ± £ z �&�e� � } |w�s{� � � ()7,>�7,= � 6 z � tXt � �X�9|$s �1� |z � t�vCw��9wy|wy° ��e� � } |wys{�L|z � | } s{�ªt � v � �cw���| � x � vC� � sqv � ê ���q� w�|Éu �X�� |�w��&x � � � v �q��� ��u&° �q� w �&�K¥ t�v � ��wys{�Uw�� �q��� s\¨ ��� s{�U|z �vIwyx{z4|ÅÄÉz � � � �w �N�q�l®$� �$| � � � sqv � �4u½sq|z � v �7� � } |wys{� �N� ì��wy|wys{�2± £ z � s\° � v �q������� } ��� v � |wys{��w�� � �� � �4|w �q��� u� � u,w���xN¯ �$£ z � | u4t � ��� ()7*>17,= w�� � �Lw����$| � � } � s � |z � } ��� �� � 6 ��� � � z � v � w��S|z �]�N� ìX�Xwy|wys{�©s � |z � � � |zNs �} sqvv � �t�s{� � w��Nx©|$s&|z � sqt � v � |w�s{� �.�X± ¡ � wy° � �é|z�w�� �N� } ��� v � |wys{� � ¨ � } � �[�Ns\¨ } s{�9t � v � ì ¥>��� t�v � } w��wys{�w��4| � x � vI� � sqv � ê ���q� wy| u � �w��Nx � ��±*È>w��9w ��� v � u¯� � 42(83 �`� 7 � 6 � 9*<�3�( � '87,=�7p � � � � p�� * 9*<13�( � 6 � �

�q��� s@¨�� � �S|$s } s{�ªt � v � � s � |w��Nx9t1s{w��4|�� � � �1� vI� � �w��Nx �.�X±¿ � } � vI�wy° � | u4t � ��� � } z � � �*=)717`�N� ì� ���À��� v � w � v } � � �q� �$s �1� z � � �X�y��� ¯� � 42(83 �`� 7 ~ � 6 3 � � s � 6 ~ �*=)717 3 � � '87,=)7( 7�3 * 3 � � ( 713 * � � 3 �.�N�~ �1=)3 ��� ' 9 v = v*� � � ~ �*=83 ��� 'r9 { = {8� � ~ 9 v � � 9 {�� ��� ~ = v �.� = {8�� � � � � � 319)4�7

'�sq| � |z � } s{�4| �K¥ | � 6 3 w��G|z � ìXvI�$| � w�� �A� |z�w��jw��/� � } � �� � vu �1� } �q� � � |z �#���y� � � �4|�¬w��9|z ���y��� ° � � ¢ s � | u4t �3 ¦ � v � } s{�ªt � v ���©� sqv � ê ���q� w�|Éu9w��`|z � � � } s{� �©� w�� � ± £ z ���q�X� wy|wys{� �q� } s{���$|$v � w��4|!w�� � �� � ��|w �q��� uª� � u>w��Nx�|z � |¨ � } � � } s{�9t � v � |$v ��� �Ss ��3�Ì � � sqv � ê ���q� wy| u � � � s{�Nx � �*¨ �T� �Ns@¨ zNs\¨ |$s } s{�ªt � v ��3�Ì � � sqv � ê ���q� w�|Éuq±   � |z �} s{�4| �K¥ |�¨ � v � s{�9wy|$| ���í� vs{��|z � w����$| � � } �P��� } ��� v � |wys{� ��� �$| � |w } | u4t ��� vvsqv�¨!s ����� v � � ��� |�±

£ z �#��� � �q����� ¿ � t1sqv| �{� �$t � } w �q��� uP|z ��� v ���������q� } s{�4| � w���� � ¨ ���q� |zªs ��� � ���7�X�4�K¥N� �ªt ��� �js � | u4t � } ��� �I� � ��±  � �N�����2��� } ��� �I� � 6 w�� ��� ìX� ��� |z � |�w���� � wyx{z4| � u ��� vx � v#|z � �í|z � s{� �P�N� ìX� ���í��� v � w � v\¯� 9*38414 � 6 3 � '�7�=)7~]� � � y ~ / � � -1- 3 q1s 3 q*s �)<1<19p / � � � � <�( ~ p �.� � �

£ z�w��!w�� � � �K¥N� �ªt �y� s ��� } ��� ��S¨�wy|z©|ɨ*sªsqt � v � |wys{��� � s{� �T� sqv � ê ���q� wy| u � |z � sq|z � v � sqv#w�� � ê �X�q� wy|Éuq±   | �q� �$s�N� �ªs{�X�$|$v � | � ��|z �P� � � s ��� Ò�ã DKÙqÓ,Ú Ï!Ý9ã�Ï K,Ñ�Ò � w��©|z�w�� } � � ��� sqv#|z � w�� � ê ���q� wy|Éu9sqt � v � |w�s{� / �±   ��� � � |zNs �� sqv � t � vI|w } ����� v�sqt � v � |wys{�^w���s{�9wy|$| ��� w�� � �½w����$| � � } �À�N� } ��� v � |wys{� � |z � �Ë|z �í�N���e�q��� |�s{� �í�N� ìX� ��� w��|z � } ��� �� �N� } ��� v � |wys{� � w � wy| �K¥ w��$|� � w�� � � ��� w����| ���q� ±`�Nsqv �K¥>� �9t �y�q� |z � |zNv ��� w����$| � � } � ��s � � 6 ��� ìX� ������ v � w � v!¨�w ��� ¨*sqv � t � v �7� } | � uª¨ ����� ¨�w�|z9|z �c� � s\° � } ��� �� �N� } ��� v � |wys{� � u,w ����� w��Nx ®� �$|!|z � vIwyx{z4| �N� ìX�Xwy|wys{�9s �w�� � ê ���q� w�|Éu`|z � |#¨ � ¨ � �4|�¯/|z �]� sqx{w } �q� � � x � |wys{�Ls ��� ê ���q� w�|Éuq±

Page 24: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

çM � ���� � ��� � 8��[����������� ����������!"� �

�T� � �q�����j�q� �$sí� � t�t1sqv|� � �Nsq|wys{�§s � Ô�ÚyÙMâIâ`ãcd�ÏÉãKÎNâBÕeÑ ÎX±]�Nsqv �K¥N� �ªt �y�q� ¨ � � � u§¨�w��zL|$s �N� ìX� ��� } ��� ��, = � ¨�zXw } zéÕ=Î-KNãKÐBÕ7Ï7â �q��� s � |z � sqt � v � |wys{�X��w�� � 6 ���X� |�w�� �q��� wy|wys{�Lz � � � � � |cs � } s{�ªt � vCw��$s{�Usqt � v � |wys{���� � � �`w���w�� � � � � � � �M¥ w�� � � �7� � } |wys{����¯� 9*38414 ~ � 6 3 � � s , = �r3 � '�7�=)7~ 2��zy ~ 2 � �zy ~ s � � y ~ s�� -1- 3 q1s 3 q*s �)<1<19�`3 p;y � � � -1- 3 q1s 3 q*s 3

'�sq| � |z � } s{�4| �K¥ |�w��í|z � � 9*38414��N� } ��� v � |wys{�2±�ò � � � uí|z � | � 6 w�� � âCÓ6BNã�ÐÅÔ�Ú Ù âIâ�s � , = �¾¢ } s{�4° � vI� ��� u � , = �w�� � âBÓ �IÔ�ÚyÙMâIâ�s � � 6 ¦ ��� � �U� �4uí|Éu,t � ¨�zXw } zUw�� � �§w����| � � } � s � , = � � � �$| �q� �$s �1�]� �¤w����$| � � } � s � � 6 ± ¢   �|z � � �K¥ |�È � } |w�s{�í¨ � x{wy° �]�ª�e�����y� v �N� ì��wy|wys{�©s � , = � | � �q� � � vIs{��|z �]� v �������N� ± ¦

¼c� �ª��� � � ì�|cs � � � } z } ��� ��Pw�� } ��� �wys{���Tw����z�sqv| � v } s{�4| �K¥ |��¯ � |Éu,t �9�K¥ t�v � ��w�s{� � sqv �À�e� � } |w�s{�¤|z � |� � � �Usqt � v � |wys{��� � vs{� � sq|z |z � � 6 � � � , = � } ��� �� � � } � � � � � |z � } s{�4| �K¥ |r~�, = �r3 � � v � |z � v§|z � �~ � 6 3 y , = �r3 � � �w�� } � , = �×� w��ªt � w � � ¡ � 6 ±ÀÆ&sqv � w��ªt1sqv| � �4| � u � � � |z�s � � � sqv]� �N� } ��� ��csqt � v � |wys{��� } � �� �� � � � |z ���K¥ w��| � � } � s � � � |z�s � � � sqv*� � t � v } ��� �I�gsqt � v � |wys{����±j�Nsqv �K¥N� �ªt �y�q� |z � , = ���N� } ��� v � |wys{��w��ª|z �È,| � � �X� v �í� v �������N� } s{��| � w����#|z�w�� �N���7�q�X� |�� � |zNs �í� sqvl~ 2�� ¯

p32 � � p32 � � � � p / � �

� � � � �K¥N� �ªt �y� s � |z �]� � � s � , = �X� |z � t�vIw�� } w�t �q� | u4tw��Nxªs � 6 � � � 5`4I<,=*(��N� ìX� ��� w��LÈ � } |wys{�Lç,±èÂN± � w���¯6 � � � 5�4�<�=1( -1- ~�, = �r3 � � s w 3 }rq*s w 3 }

  � sq|z � v&¨*sqv � � � 6 � � � 5`4I<,=1( s{� � u~sqt � v � | � �Ls{� � w��$|�©s � ° �q����� �Às � sqv ��� v ��� |Éu,t � ��± £ z�w��©|Éu,tXw��Nx � sqv6 � � � 5`4�<�=1(`� vIw�� � � �1� } �q� � � s � |z �]� � � s � |z � } s{�9t � vIw��$s{�&sqt � v � |$sqvI� 2 � � � s ��w��íw�|� �N� ìX��w�|wys{�2±

�T� � �q�������q� �$s�t � vC�9wy|�#ÝGÓ>Ú ÏeÕ�BÚ�ãPÕ=Î-KNãKÐBÕ7ÏdÙ Î�ÔCã � �w�� } � } ��� �I� � �!� � u`z � ° � �9sqv � |z � �`s{� � � � t � v } ��� �I��±���sqv�K¥N� �ªt �y�q� |z ���N� } ��� v � |wys{�� 9*38414 ~ � 6 3 y �I'�< � 3 � � s � 3 � '�7�=)7 :*:1:

} v ��� | � � � } ��� �� � ¨�zXw } zíw��Xz � vIwy|�*sqt � v � |wys{��� � vs{� � sq|z � 6 � � ���I'8< �±r ��� ��!� � |zNs � � � v � |$v ��� | ���À� �*|$sqt �y� ° ������ } ��� v � |wys{���*w�� ��� � �q����� ± £ z � u9�z � v � |z � � � � � � � � � �t � } �

� �ªsqv � w�� � vub° � vIw � �X��� � ñ*� � � � � } � ���Nsq| �1�í� � ��� |$s �N� �Nsq| �í� sq|z � } ��� �I�ª� � |zNs �½� � �½� ° � vCw � �X�y� sqv� � |zNs � �#w�� � wGH � v � ��| } ��� �� � ��±

r*s{�4| �K¥ |� � v �]�q� �$s �q��� s@¨ ��� w�� ��3�(83ª�N� } ��� v � |wys{��� ñ � ���\@ ÂN± ç,± � ±r ��� ��l� � |z�s � �l� � u]z � ° �!�q�X� wy|wys{� �q� } ��� �� } s{�X�$|$v � w��4|�ls{� � ��u�| u4t � ° � vIw � �X�y�g�K¥ } � t�|l|z � s{� �!��� ìX��w��Nx

|z � } � vv � �4| } ��� ���±/�Nsqv �K¥>� �9t �y�q� w��À|zXw�� } ��� ���¯� 9*38414 � 3 � '�7�=)7� -1- �I'8< �t� � s 3 q1s �

|z � � � |zNs ��� v � ê � w�v � �c|z � |]| u4t � �¾w��Pw�� } ��� �� �I'�< ��± � s\¨ � ° � v � |z � � � |z�s � � } s ����� �Nsq|Pt ��� } �`� ��u�q��� w�|wys{� �q� } ��� �� } s{���$|$v � w��4|�Ts{�§|Éu,t �\3 ± £ z � � � ¨*s ����� w����| ���q� z � ° � |$s �1� t � v|Ts � |z � } s{��| �K¥ |Pw��U|z �} ��� �� �N� } ��� v � |wys{��±

È,s �7� v � ¨ � z � ° ���1��� � � �w���x � ì�vI�$|ÅÄdsqv ��� v ¡ | u4t � ��±���sqv �K¥N� �ªt ���q� |z � |Éu,t � } s{���$|$v � } |$sqv �1=)7*7 z � �T�$s�e� v �q� ¨ � u>� �1��� �Lt � wyv ��� ¨�wy|z � � � vx � � � �4| �� �Tw�� �1=�717 ��� ()7,>�7,=§¢e� |$v ��� } s{�4| � w���w���xx��� ()7,>�7�= ° �q���N� �C¦sqv �*=)7*7 3 ¢ v � t�v � � � �4|w��Nx[|z �U�e� �9w � u[s � |$v ��� � } s{�4| � w���w��Nx 3 ° �q���N� �C¦C± Ê*� | �1=�717[� u~w�|� ���y� w�� � | u4t �} s{���$|$v � } |$sqv �j� � �¾� �]� � } zé| � �q� � � | u4t �`� � � � � vx � � � ��| � � � v � | � vI��� � | u4t �`� � � v � � �X� |�± £ z � v �`� v �

Page 25: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç�#

�NsË° �q���N� ��w�� �T� � �q����� |z � |Àz � ° � |zXw��`| u4t �q�#�� |©� � } z � z�wyx{z � vÄdsqv �N� v ¡ |Éu,t � � } � � �1�U� � ��� w�� � 9*38414�N� } ��� v � |wys{����±

£ s �1� x{w�� � } s{���w �N� v�|z �P� s ��� s@¨�w��Nx � � �`� ()<,= } ��� �� ¢ | � �q� � � vs{��|z �]� v ��������� ¦C¯� 9*38414 � � ��� (�<,= * � '87,=�7

* �`32+ -1- ~ 3 q*s � � q*s * 3 q*s *N�£ z � * ��3I+U�e� � } |wys{�§x � � � v �q� w&% � �c|z � �`32+¤�7� � } |wys{� � � ��� t�v � °>wys � � � uq± '�sq| � |z � |�|z � |Éu,t � ° � vIw � ��y� *Uw��� t�t � w ��� |$sLsq|z � v�|Éu,t � �]w�� * 3&� � � *N�1± £ z � ��¨ � ¨*s �����b�K¥ t � } |]wy|P|$s �1�ª� s � � � |$s � |Éu,t � � � } z � ��1=�717 ¨�zXw } z } � � ���P� tXt � w ��� |$s � � � vIx � � � �4|�± � �Lw����$| � � } � s � � � �`� (�<,=9� sqv�|Éu,t � �*=)717 ¨*s �����À�1� ¯� � 42(83 �`� 7 � � �`� (�<,=��1=)7*7 � '87,=)7

* �`32+ * ~ ( 7�3 * p�� �)( 7�3 * ~]* p��* �`32+ * ~ �*=83 ��� ' ( v ( {8� � �1=83 �`� ' ~]* �`3I+ * ( v*� ~�* �`32+ * ( {8�

£ z�w���w����$| � � } �P��� } ��� v � |wys{� ��� } ��� v � ��|z � | �*=)7*7�� v � |z � v�|z � � �1=�717 3N� w�� � �&w����| � � } � s � � � ��� ()<�= ± £ z�w��} � t � � w � wy|ÉuÀw��#ê � wy| ��� � ���e���Ö�N� � � z � v �]�N� �ªs{�X�$|$v � | � �#|z �]� � w � w�|Éu©|$s �N� � } vCw �1� x � � � vIw } � } s{�4| � w�� � v ¡ |Éu,t � � ��q��� s@¨�w��Nx �7� � } |wys{���*� � } z � �H* �`32+ |$sG¨*sqv ��� �Xw � sqvC� � u�s\° � v � v � wy|$v � vuª|$v ��� � ��� w��$|� �,� � � sq|z � v ��� | � |Éu,t � ��±

Á £ u4t �c� t�t � w } � |wys{��� � v � ¨#vIwy|$| � �©w���|z � � � � � � � ��� � v � � �e� � } |wys{� � t�t � w } � |wys{����± £ z � |Éu,t ��� 3 �©w��t � vI� ���©� �V~ � 3 � �1± £ u4t � �S� � } z � �S| � t �y� �!¨�z�w } z � � � �$t � } w �q� �$u,�4| �M¥ } � � ��� ¨#vIw�|$| � ��w�� � � �q� | � vC� � |wy° ��$| u �y� ¨�zXw } z �q��� s@¨�� } � vvu>w��NxN± �Nsqv �e� � } |wys{�X� � ~ q1s�� w�� � | u4t � } s{���$|$v � } |$sqv ñ |z � |Éu,t � � * q*s >�� � �~ q*s�� * >é� v � |z � � � � � ±~È>w��9w ��� v � u � |z � |Éu,t � �nw 3 } � � � w } 3b� v � |z � � � � � ±^�Nsqv9| � t ��� � � |z � | u4t �} s{���$|$v � } |$sqvI� ¢e� ��¨ �����2� �#|z �P��� | � } s{���$|$v � } |$sqvC�C¦ � v � ~ y�� � ~ y*y�� ��� � � �$s9s{�2± Ã

� �g¨ �#� ��s\¨ � |z � |Éu,t � �$u,�| � � �N� | � } |�/| u4tw��Nx � vvsqvC�/w�� �K¥ tXv � ��wys{�X��± ÊS� |g¨�z � | � � s � | � vvsqvI� ���N� |$s� �q�y� sqvI� ��� | u4t �#�K¥ t�v � �I�wys{��� " £ z ���K¥ tXv � ��wys{�X~ u�� v { | v � � ��� |�gw�� � |Éu,t ��� vvsqv¬�w�� } � ~ u�� | � �q� �¬s{� � u|ɨ*s � vx � � � �4|��±�È>w��9w ��� v � u � |z � |Éu,t � �1=�717 ��� ( ��� ( �z�s ����� tXvs �X� } � �$s{� � �$sqv|Ts �/� � � vvsqvc�w�� } � |z ��1=�717 | u4t � | � �q� �#s{� � u � �w��Nx �y��� vx � � � �4|�±*È,s � z�s\¨ � s � � �T� � �q�������N� | � } |�� �q�y� sqvI� ��� |Éu,t ���K¥ t�v � ��wys{���#"£ z �&� �X�$¨ � v�w�� � � � } s{� � | u4t � �u,�$| � � ¨�z�w } z � ��� � v � �G|z � } sqvv � } |� � ��`s � | u4t � � � h � } z�|Éu,t � z � � � �� ��$s } w � | ��� æ@Õ7ÎÒÀ¨�z�w } z � ��� � v � �S|z � |#|z � |Éu,t � w�� � � ��� } sqvv � } | � uq±

£ u4t ���K¥ t�v � ��Iwys{��� � v � } ��� ��wyì ��� w���|$s � w&H � v � �4|cæ@Õ7ÎÒMâ*¨�z�w } zí| � �q� s{� � s � | ¨!s`t�s{�I�w �X�y�T� sqvI�9��¯

� £ z � �u,� � s � � v � t�v � � � ��|�T|z �G� w�� � s � |Éu,t �ª� ��$s } w � | ��� ¨�wy|z } s{� } v � | �9��� | � s �>®$� } |��± £ z � |cw�� � w �|z � ° �q���N� f z � �#|Éu,t � Ï � |z ��� w�� � s � f � � �| ��� � ±

�   ��� F � � ��� # � v �9� w�� � � � |z � � � F�� � #9w���|z �9� w�� � s � |Éu,t � �]|z � |]| � �q�À� | u4t � s ��� w�� ��� F � � �v � | � vI� � | u4t � s ��� w�� ��� # ±£ z � |Éu,t � } s{�X�$|$v � } |$sqv �1=�717 z � �*|z �T� w�� � � � � ñ |z � |Éu,t ���1=�717 ��� ( z � �*|z �T� w�� � � ±¬Æ � � ��� vC�!s � |z �� � �`� ()<,= } ��� ���� � �$| �q��� z � ° � |z ��� w�� � � � � ñX��� w�� � w��Nx � vvsqv�¨*s ����� v � � �X� | � vs{� � � �N� } ��� v � |wys{�í� � } z� �� � 42(83 �`� 7 � � �`� (�<,= ��� (�7*>17,= � '�7,=�7 :1:*:

�w�� } � ��� (�7*>�7�= z � ��|z �P� w�� � � ±� w�� � � � s[�Nsq| � t�t ��� v � wyv � } | � u½w�� �T� � �q����� t�vsqxqv � �9��± £ z � } s{�ªtXw �y� v�w�� �=� vI� � w�� � � �1��� sqv �¤� s{w��Nx

|Éu,t � } z � } � w��Nx9¨�wy|z�s � | � ��uÀ� �����í� sqv�� � w�� �í�N� } ��� v � |wys{��� Ì ± � w�� � �S�$| � u&w��À|z ���X� } � xqvs � � � s �g�ª��� � �q�����t�vsqxqv � � �K¥ } � t�|�¨�z � � � � � vvs{� � s � ��|Éu,t � �wyx{� � | � v �]�y���q� ��|$s �`� w�� �í� vvsqv�± � w�� � � � v � �w��ªt ���T� ��s � x{z|z � | } s{�ªtw �y� vI�S�zNs �X���`�1��� �X�y� |$s9tXvs\°>w �N�c�N� � } vIw�t�|wy° �c� vvsqv#� � �I� � x � ��¨�z � � � w�� � } s{� � w } |�Ss }�} � v\±*È ���@ ÂN± � ± ��� � � @ ÂN± � � sqv��ªsqv � w�� � sqvI� � |wys{� � � s � | � w�� � ��±

Page 26: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç � � ���� � ��� � 8��[����������� ����������!"� �

) ��� ���.��"$���$� �.� %'��� ��� � � Ê*��� sqv � xqs{w��Nx©s{�§|$s �7� vI|z � v �K¥N� �ªt ��� ��s � |z �ª� � � s � |Éu,t � } ��� �� � � � wy|cw��¨*sqv|z§t�s{w���|w���x9s � |T|ɨ*s©sq|z � vT°>w � ¨���s �¬�T� � �q�����ÖÌ �T| u4t � } ��� �� � ��± £ z � ì�vI�$|Tw�� � u � � �q� sqxqu&¨�wy|zUs �>®$� } |ÅÄsqvIw � �4| ��� t�vsqxqv � �9�9w��Nx ¢ ¼P¼ � ¦C±   �À|z ��� s ��� s\¨�w���x�x � � � v �q� �$| � | � � � �4| � � s � |�¼P¼ ��� �w��ªt � u9� �N� �|wy| � |w��NxÏeá�BNãªÔ�Ú ÙMâCâ � sqv�Ô�Ú ÙMâCâ �X� � � Ïeá�BNã � sqv�Ñ�����ãIÔ�Ï � u>w ����� � � ° �q� w � � � �9� � vIu�s �j��� � �q�����ÖÌ ��| u4t � } ��� �I�#� � } z � ��w���í¯

��� ÚyÙMâIâ�ãBâ } � t�| � v � } s{�9�ªs{�L� � |�Ss � sqt � v � |wys{�X��± � t � v|w } ����� vPÑ�����ãÔ\Ï1� � u ���c� �íw����| � � } � s ��� Ô�ÚyÙMâIâ �� � � ¨�w ��� z � ° �G� � � |z�s � } sqvv � �$t1s{� � w��Nx9|$s ��� } z¤sqt � v � |wys{�2± � ÚyÙMâIâ�ãBâ�� � u �1�]� vv � ��x ��� zXw � v � v } z�w } �q��� u �� sqvI�9w��Nx��Nsq|wys{���!s � � � t � vMÔ�ÚyÙMâIâ�ãBâ � � � � �N� Ô�Ú ÙMâCâ�ãKâ �>� � � t � vI�`wy|$|w��Nx]w���z � vIwy| � � } � s � sqt � v � |wys{�X� « � � |zNs � ��±���N���7�q�X� |#� � |zNs � � � u �q� �$s �1�P� ��$s } w � | ��� ¨�w�|z � �ísqt � v � |wys{�2± ¡

  � } s{�4|$v � �$|�|$sÀ¼P¼ ��� wy|#�zNs �X���À�1� } ����� v�|z � |#| u4t � � � v � �Nsq|#s �>®$� } |� �X� � � w��Àt � v|w } ����� v�|z � v � w����Ns�Nsq|wys{�Ls �/� �&s �>®$� } | Ì ��sqv�| u4t �qÌ �Tw���| � vC� �q� � � | � �X�y� �| � | � ± � � �q� ° � �4| � x � s\° � v��$s{� � ¼P¼ �×��� �Nx ��� x � �Tw��|z � |*� � |zNs � �¬w�� ��� � �q�����X� v � } s{�ªt �y� | ��� uG| u4t � ÄÉ� � �7� ¯ � ��u � |$| � �ªtX|!|$s � t�t � u � � � |z�s � |$s � ° �q���N� ¨�zNs{� �|Éu,t � w��c�Nsq|Pw��U|z � v � ê � wyv ��� } ��� ��c¨�w �����1�ª�N� | � } | ���¾� | } s{�ªtw �y� |w�� � w����$| ���q� s �*� |�v � �4|w�� � ±   �¤sq|z � v¨*sqv � � � � � |z�s � � � v � �Nsq| �$� s,s �q���L� t ¡ª� |#v � �4|w�� �c�X� | � v � �w��ªt � u9t � �� ���&� ��z�w�x{z � v$Ädsqv �N� v �e� � } |w�s{����±

��� wGH � v � ��|jt � vI�$t � } |wy° � } � � �1� xqsq|$| � � � u } s{���w ��� vIw��Nx�|z � v ����� |wys{�X�z�wyt ��� | ¨ ��� �9t � v � � � |$vIw } � � � Ù�ÒK,Ñ�Ô�t1s � u>�ªsqvtXzXw���í±gò � z � ° � �zNs@¨��LzNs@¨ t � v � � � |$vIw } t1s � u>�ªsqvtz�w��� w�� � � ���7�X� w�� �N� ìX�Xw��Nx �e� �9w � w � �Ss �|Éu,t � � � u � ��wy° � vI� �q��� u�ê �X� ��|w � u>w��Nx�s@° � v �q��� |Éu,t � ��±/È,s{� � |w�� � � � zNs\¨ � ° � v � |z � | � ��wy° � vI� �q� ê ��� ��|w�ì } � |wys{�Gw��|$s,s � vs �q�1� ¨ � ¨�w��z9|$sªê ��� ��|w � uªs@° � v#�$s{� � �� �q���y� v*� � |Ss � |Éu,t � � � � � } z � �*|zNs{� � |Éu,t � �*¨�zNs{� �T���y� � � �4|�} � � �1� } s{�9t � v ���¤� sqv � ê ���q� wy|Éuq± £ u,t � } ��� �I� � � } � � �1� � ��� � � �ctXvs\°>w � w���x � �$|$v � } | � v ��� ¨ � uU|$s � s ®� �$||z�w���±   � �N������� ¨ � } � �í|z�w�� � s � t � v � � � |$vIw } t1s � u>�ªsqvtz�w��� � � ��� w�� � s � s\° � v � s �q� w��Nxª|$s,s �   | Ì � ®$� �$|S|z � ||z � s\° � v � s �q� w��Nx§s }�} � vI��w��ªt � w } w�| � uLs@° � v �q��� | u4t � �Gw����$| ���q� s �#� } s{���$|$v � w�� ��� � � |�s � | u4t � � ¢ wÖ± � ± � | u4t �} ��� ��B¦C±

���$� %,% � � � ��"5� � �+ ��� � %�" ��(% � ��� � £ z � } ��� �� � � � � ���b� u ��� � �q�����¬� v � �w��9w ��� v�|$sL|zNs{� ��� � ��� w��sq|z � v�s �>®$� } |ÅÄdsqvIw � �4| ���í��� �Nx �X� x � ��� � } z � �#r�� � � � �À�{� ° � ± � s@¨ � ° � v � |z � v �c� v � �$s{� � �wyx{�Xwyì } � �4| � wGH � v$Ä� � } � ��¯

� �T� � �q����� � � t � v � | � ��|z �]�N� ì��wy|wys{�Às �g� | u4t �P� vs{��|z ���N� ìX��wy|w�s{��s � |z � � � |zNs � � � ��$s } w � | ��� ¨�wy|z|z � |&|Éu,t � ± � } ��� ��&w�� r���� sqv �{� ° ��� � ���q��� u �N� ìX� � � � sq|z ����� | � �$|$v � } | � v ��¢ |z � � � � �1� v° � vIw � ��y� �C¦ � � � |z �ª�e� � } |wys{�X� � �I�$s } w � | ��� ¨�wy|z¤|z � �|$v � } | � v �&¢ |z � � � |zNs � �C¦C±   � �T� � �q�����Ö� |z � � ���� ìX��wy|wys{�X� � v � � � t � v � | ��� ±

� £ z � } ��� ���� � |zNs � � �N� ìX� ���©� u �G��� � �q����� } ��� �� } sqvv � �$t1s{� � |$sG°,w�v| ���q��7� � } |wys{���*w�� � r���� } ��� ���±h � } z�w����$| � � } � s ��� } ��� ��gt�vs@°,w �N� �/wy|�gs@¨�� �N� ì��wy|wys{� � sqv ��� } z©� � |zNs �2ñ } ��� �� �N���e�q��� |� } sqvIv � �$t1s{� �|$s �N���7�q�X� | �N� ìX��w�|wys{��� � sqv � °,w�v| ���q���7� � } |wys{�&w��À|z ���X� � � } ��� �I��±

� �T� � �q����� } ��� �� � � � v � vs � x{z � u��w��9w ��� vj|$s �]��� ° � w��4| � v �e� } � ±gÇlw �q��� �`w���| � v �7� } ����� } ��� v � |wys{� �4�P��� � �q�����} ��� �� �N� } ��� v � |wys{� �N� ìX� � � � t�vsq|$s } s �2� sqv � �w��Nx � �ís �>®$� } |#v � |z � v�|z � � �N� ìX�Xw��Nx � �ís �>®$� } |�wy|� ����� ±

� �T� � �q�����j� s � �T�Nsq|T� � t�t1sqv|#|z � r�� �­s\° � v � s �q� w��Nx©�$|Éu �y� w��U¨�z�w } z �e� � } |wys{����¨�wy|z � wGH � v � �4|�|Éu,t � ��Iz � v �P� } s{�9�9s{�L� � � � ±

� £ z � | u4t � s ���U�T� � �q����� s �>®$� } | } � �X�Nsq| �1� w��ªt � w } wy| � u } s � v } ���2ñ |z � v � w��]��s � �Xwy° � vI� �q�g�� � � } ��� ��� � } z � � ,2��� 7 � ( ¨�zXw } zÀ° �q���N� � } � � ��� tXvs ®Å� } | ��� w��4|$sªsqv#s � |#s � ±

Page 27: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç ï

� r � � � � �]��� ° �#� |$| � } z�w �N� �4|w � u,w��Nx*w�� � sqvC� � |wys{� ¢ � � } z � � � � £�� �X�y� ¦�|$s�|z � v � �4|w�� � v � tXv � � � �4| � |wys{�s ��� �`s �>®$� } |�±   � �T� � �q�����d� � � } z`w�� � sqvI� � |wys{�9w�� � |$| � } z ���À� sqx{w } �q��� u�w��X�$| ���q� s � tXz4u,�w } �q��� u]|$s�° �q���N� � �|z�vs � x{zí|z � |Éu,t � �u,�$| � �&±

� £ z � v � w��S�Ns � }�} � �� } s{�4|$vs �/¢ � � } z � �St �N�X� w } sqvSt�vIwy° � | � } ��� �� } s{���$|wy| ��� ��|�C¦ �X� w � |!w���|$s�|z ����� � �q�����} ��� ����u,�$| � �&±   ���| ���q�2� |z � �ªs �����y� �u,�$| � � � � �$| �1�`� � ��� |$s¤z�w �N� sqv�v � ° ���q� } s{�ªt1s{� � ��|��s �#�} ��� ���±

� UXW Y�Q�S�T�� ��M#»C´

��� v � ¨ �P�K¥>� �`w�� � �$s{� � s � |z � �ªsqv �P�q� ° � � } ���L� �t � } |�#s � | u4t �P�N� } ��� v � |wys{����±

�+021 D ?�G � G�� �$8�=HG � GLC-6! < �>AT4 �

� } s{�9�ªs{�9tXvsqxqv � �9�9w��Nxct�v � } |w } � w��j|$s �N� ìX� �#� | u4t � ¨�zNs{� � v � t�v � � � ��| � |w�s{�9w��/w ��� ��|w } �q� |$s � � �K¥ w��$|w��Nxs{� �í�X� |�¨�zXw } z^z � � � � � t � v � | � w �N� �4|wy|ÉuËw��Ë|z � |Éu,t � �$u,�| � �í±   � ��� � �q�����Ö� |z � � 7 � (���+�7¤�N� } ��� v � |wys{�} v ��� | � � � � � ¨ |Éu,t ��� vIs{� � � �K¥ w��$|w��Nx�s{� � ±¬��sqv �K¥N� �ªt �y�q� � � | � v �q� � � � �1� vI� } � � �1� v � t�v � � � ��| ���&� u©|z �|Éu,t � ��� ()7,>�7,=`� �w���x�|z ��� s ��� s\¨�w���x ��� } ��� v � |wys{�2¯� 7 � (���+�7 3�(!�)=83*9 ��� 3I587 3�(!�)=)319 ��� (�7*>�7�=

£ z�w�� } v ��� | � � � � � ��|wyv ��� u�� � ¨~|Éu,t �q� 3�(���=8319,� ¨�z�s{� � s{� � u } s{���$|$v � } |$sqv } s{��| � w���� � �Iw��Nx �y� ��� ()7,>�7,= ± £ z �} s{���$|$v � } |$sqv� 3I587 3�(!�)=83*9 } s{�4° � v|� ��� | ¨ ��� � � �� 3�(���=8319ª� � �í� � ��� (�7*>�7�= ¯()< 3�(!�)=)319 -1- ��� ()7,>�7,= q1s 3�(���=8319()< 3�(!�)=)319 p � p52 ( � 7,=1=�<,= � ��3 �m ( � =)713�(�7 � 7*>�3�( � �)7 � 3�(��)=)319)4 � �

�l<�(,'�7�= � � 4�7 ��� 3�5)7 3�(���=83*9 p* =�< � 3�(!�)=83*9 -1- 3�(���=8319 q1s ��� ()7,>�7,=* =�< � 3�(!�)=83*9 ~� 3�5)7 3�(���=83*9 � � � �

£ z ��� s ��� s@¨�w��Nxªw��X�$| � � } �P�N� } ��� v � |wys{� �q� �9w�|� 3�(!�)=83*9 |$s9|z � � � } ��� ���¯� � 42(83 �`� 7 � � 3�(!�)=)319 � '�7�=)7

* =)< � ��� ()7,>�7�= � ()< 3�(!�)=83*9p u � � ()< 3�(!�)=83*9 ~�* =)< � 3�(���=83*9 p u * =�< � 3�(!�)=83*9 � �prq � � 9*7,( = � * =)< � 3�(��)=)319 prq * =)< � 3�(���=83*9 � � �

� * = 2 (t(,'�7 � 7,=*=)<,= ���1�*� 3�(��)=)319 4�� � (1=)3 � ( � < � �7�984I7t()< 3�(!�)=)319n=

p ��� � ()< 3�(!�)=83*9 ~�* =)< � 3�(���=83*9 p � * =�< � 3�(!�)=83*9 � �ò wy|zNs � |*|z�w�� �N� } ��� v � |w�s{� � 3�(!�)=)319 ¨!s �X��� ��sq| �1� w�� � � ±   ���$| � � } � � �N� } ��� v ����� sqvS|z � s ��� | u4t ��� sG�Nsq|} � vvuUs\° � vP|$sÀ|z � � � ¨ s{� � ±   � �������2� |z � ¨�zNs �y� t � vt1s{� � s � |z�w��T| u4t � w��T|$síw���|$vIs ��� } ���À� wGH � v � �4| � �w����| � � } � ± £ z�w��S¨*s ����� ��sq| �1� t1s{��Iw �X�y� w � 3�(!�)=83*9 ¨ � v �]��� ìX� ���í� � � | u4t � �u,�Ns{�4u>��s � ��� (�7*>17,= ±

�T��� s � |z�w��¬¨!sqv � � � �w���x � ��3�()3��N� } ��� v � |wys{�Àw����$| ���q� s �l� � 7 � ( �,+87��N� } ��� v � |wys{�2± � s\¨ � ° � v � |z � ��3�(83�N� } ��� v � |wys{�½w�� } � vC� �K¥ |$v � s\° � vCz ���q� w��Ë|z � v � tXv � � � �4| � |wys{�^s � 3�(��)=)319 ° �q���N� ��± £ z �í� � � s � � 7 � (���+�7� °qs{w � �/|z ���K¥ |$v �P�y� ° ��� s � w�� � wyv � } |wys{� ¢ } �q� � ���`� u ��� %�w�� � ��B¦�|z � |/|z ����3�()3P�N� } ��� v � |w�s{�9¨*s ����� w��4|$vs ��� } � ±

Page 28: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ç î � ����������i���! �

È ��� � � } |wys{�¾ÂN± ç,± ë&s � |z � v � t1sqv| � sqv � �ªsqv ��� w�� } � �I�wys{�§s � |z � v ����� |wys{� ��� | ¨ ��� � � 7 � ( �,+87N� �)3�(83,�j� � �(���+�79�N� } ��� v � |wys{����±

Á h ¥ } � t�| � sqvc|z ���q� u,¨*sqv �2� |z � � 7 � ( �,+87©�N� } ��� v � |wys{� � � � �T|z � � � � � �$u>��| �M¥§� � � �)3�(83©�N� } ��� v � |wys{�¨�wy|z � �w��Nx �y� } s{���|$v � } |$sqv } s{��| � w��Xw��Nx � �w��Nx ��� ì ����� ± £ z�w��Pw�� � t�t�vsqtXvIw � | � �w�� } � | u4t � � �N� ìX� ���¾� �w��Nx� 7 � ( �,+�7ª� v � � ��� v � u©w �N� ��|w } �q� |$s9|zNs{� � } v ��� | ���&� u � �&sqv � w�� � vIu ��3�(839�N� } ��� v � |wys{�2± Ã

�+0 / � ATGJ6 � � �HGL6�I

£ z � ì ����� ��¨�wy|z�w�� ����� � �q�����{��� | � | u4t � } � � �1�/� }�} � �� ���P� wy|z � vlt�s{�Iwy|wys{� �q��� u�sqv � u�� � � �/� �w��Nx �*ã�Ú ÒbÚ Ù��CãKÚ â{±r*s{���Iw �N� v �ª��� | � | u4t �P� sqv � | ¨!s Ä � w�� � ���w�s{� �q� t1s{w���|�¯

�)3�(83�*)< � � ( � *1( � 9,<�3�( � 9,<�3�(£ z � |ɨ*s } s{�ªt1s{� � �4|��s �P� *)< � � (Ë� v � |z � ìXvI�$| � � � � � } s{� ��� vx � � � �4|�©|$sé|z � } s{���$|$v � } |$sqv *1( ± ��e� � } |wys{�í� � } z � �+�< � � ( p -1- *)< � � ( q1s � 9*<�3�(+�< � � ( p ~ **( p � � � p

� � u ����� � ��� |$s§v ���7� v]|$s§|z � ìXvI�$| } s{�ªt1s{� � �4|]s �#� t1s{w���|Pw�� � �9sqv ���N� � } vIwyt�|wy° � ¨ � u �g�� | ��� sqv ��� vx ��$|$v � } | � v � � � wy| �1� } s{� � ��| ��� wys � �S|$s } v ��� | � � � } z �e� � } |wys{�X� � uÀz � � � ±

r*s{�X�$|$v � } |$sqvI��w�� � ��3�()3L�N� } ��� v � |wys{�é� � u �1�`�N� } ��� v ��� ¨�wy|z � �I�$s } w � | ��� �*ã�Ú Ò¾ÎÙ Ý`ãBâ ��� � } � s{� ��� w��� v � } � ��± £ z � � � ì ����� � � � � �!w ��� ��|w � u�|z � } s{�ªt1s{� � �4|�!s � } s{���$|$v � } |$sqv � uª� � � � v � |z � v!|z � � � uªt1s{�wy|wys{�2±£ z�w���w�� � � �q� | � vI� � |wy° � ¨ � uÀ|$s �N� ì� � *�< � � ( ¯

�)3�(83�*)< � � ( � *1( � +8< � � ( p;y +8< � � (�� -*- � 9*<13�( �£ z�w�� ��� | � | u4t � w��]w ��� ��|w } �q� |$sU|z ����� v � w � v �N� ìX��wy|w�s{�bs � *�< � � ( ± £ z � } s{���$|$v � } |$sqv *1( w��P|z � � � � � w��� sq|z } � � � ��± � s@¨ � ° � v � |zXw�� �N� } ��� v � |wys{� �q� �$s �N� ìX� � �/|ɨ*s�ì ����� � � � � � ��+�< � � ( p � � � +8< � � (�� ± £ z � � � ì ������ � � � � } � � �1��� � ���©� �#â�ãKÚ�ãÔ\ÏdÑ Ð DCÓ>ÎÔ\ÏeÕeÑqÎNâ�|$s �K¥ |$v � } | � } s{�ªt1s{� � �4| � vs{� � �$|$v � } | � v � ±   ��|z�w�� �K¥>� �9t �y�q�|z � � ���y� } |$sqvI� � v � ¯+�< � � ( p -1- *)< � � ( q1s � 9,<�3�(+�< � � ( � -1- *)< � � ( q1s � 9,<�3�(

£ z�w���w�� �ª�e� � } |wys{� � �Iw��NxG|z � � � � ���y� } |$sqvI��¯3 � 4'*)< � � ( -1- *)< � � ( q1s � 9*<�3�(3 � 4'*)< � � (N+ � 4 6 =1( ~ +�< � � ( p + � +�< � � ( p + u

+�< � � ( �N+ � +�< � � ( �N+ �

�jw ��������� ����� � } � � �q� �$s �1�/� � ��� |$s } s{���$|$v � } |�� � ¨¾° �q���N� ��± £ z �j�K¥ tXv � ��wys{� *1( � +8< � � ( p � vzy +�< � � ( � � { �w��!w �N� �4|w } �q� |$s *1( v { ± £ z ��� � � s � ì ����� � � � � �¬w��`|z ���N� } ��� v � |wys{�9s ������� | � } s{�X�$|$v � } |$sqv � s � �¬�Nsq|!t�v � Ä} ������� |z � t1s{�wy|wys{� �q� �$| u �y� s � ì ������� }�} � �I� ñN� sq|z *1( � +8< � � ( p � v y +�< � � (�� � { � � � ��**( vn{ � v �c�q��� s\¨ ��� ±ò z � � } s{���$|$v � } |w��Nx � ° �q���N�G� �w���x`ì ����� � � � � � � �s{� � ì ����� �T� � u ��� s{�9wy|$| ����ñ |z � � �ª� � � � �4|cì ����� � � v �� � ��� ìX� ��� ±

�j� |$| � vI�U� � | } z�w��Nx � �w��NxGì ����� � � � � � � � � � � �Iw��9w ��� vS�$u>��| �M¥í� sqv�|z � } s{�X�$|$v � } |$sqv **( ¯3 � 4'*)< � � ( ~ **( � +�< � � ( p � p;y +�< � � ( � � � ��� � 4 6 =*( ~ p � p u � � � �

Page 29: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ��� �� ]��� �����!��� ���'�L� �� +� � �2�� ]� ç �

� � � t ��� | �À�7� � } |wys{� � � � �Gì ����� ° �q���N� �Gw�� � � �K¥ w��$|w��Nx§�|$v � } | � v � |$sbì ��� w�� } s{�9t�s{� � ��|�Gs �c� � � ¨�$|$v � } | � v � ±   �P+ w�� � *)< � � (�� |z � � + � +�< � � ( p � {�� w�� � t1s{w��4|G¨�wy|zË|z � � � � �[+8< � � (��é� � +Ë�� |G¨�wy|z+�< � � ( p v � t ��� } ���À� u { ± £ z�w��Sw����Nsq| �`�N� �$|$v � } |w�° �P� t ��� | � ¯j|z �P� t ��� | �c�7� � } |wys{�í� � v ��� u } v ��� | � � � � � ¨} sqt,u©s � |z � s �N®Å� } | � ì ��� w���x�w��À|z � �$t � } wyì ��� ì ����� �!¨�wy|zí� � ¨ ° �q���N� ��±

Á £ z �P� v � } � � � � ��� w�� } s{� ®$� � } |wys{�í¨�wy|z&ì �����í��� �1��� � � v � �$s{� � ¨�z � |��$t � } w �q� ¯ �T� � �q����� �$u,�4| �M¥&� � ���q��� u�q��� s@¨�� � v � } � �T|$s ��� s{�9wy|$| ���¤� �w��Nx9|z � Ú ÙqáqÑqÓ>ÏcÐBÓ>Úyã ¢e�N� � } vIw ����� w��bÈ � } |wys{�UÂN± � ¦C± � s@¨ � ° � v � |z ��� v � } � �� ��$s } w � | ��� ¨�wy|zÀì ����� � � � � �#� � �$| �1���K¥ t � w } wy|�± Ã

�jw ����� � � � � � � v � �Nsq|9v � �$|$vCw } | ��� |$s¾| u4t � �`¨�wy|z � �w��Nx �y� } s{���$|$v � } |$sqv ¢ } s{�9�9s{� � u } �q���y��� � v � } sqv �2Ì|Éu,t � �C¦C±   � � | u4t � ¨�wy|zÀ� ��� |wyt �y� } s{���|$v � } |$sqvI� � � ����� } |wys{�Àsqv � t ��� | � sqt � v � |wys{��� � �w���x�ì ����� � � � � ��� � u�e� w �� |Sv � ��|w�� � ± £ z�w��*w��!�Iw��9w ��� v!|$sG|z �c��� z � °>wysqv!s � |z ��'87�3��G�7� � } |wys{�`¨�z � � � tXt � w ��� |$s � � � �9t�|Éu � w��$|�±

�jw �����§��� �1��� �T�z � v � |z � |$sqt �y� ° ��� � � � � �$t � } � ¨�w�|zLsqv � w�� � vuí° � vIw � �X��� � � � � } ��� ��c� � |z�s � ��± � ì ������ � � � } � ����sq| ���c� � ��� w��À�ªsqv � |z � �Às{� ����� | � |Éu,t � w���� } sqt � ± � s\¨ � ° � v � ¨�wy|z�w�� �G��� | � |Éu,t �q� |z � � � � �ì ����� � � � � } � � �1��� � ��� w��U�ªsqv � |z � �§s{� � s � |z � } s{���|$v � } |$sqvI���$s � s{�Nx � ��wy|Tz � �T|z � � � � � |Éu,tXw��Nx©w���q��� } � � � ��±!�Nsqv �K¥>� �ªt �y�q� w��À|z�w�� ��� | � |Éu,t �

�)3�(83�� � � v �>* -1- ��� ( y > -*- � 9*<13�( ���� { �>* -1- ��� ( y ' -*- �)<1<19 �

|z � ì ����� � � � � * � t�t � w � �S|$s � sq|z } s{���$|$v � } |$sqvC��w�� � ± £ z � ��w � p w��#s � |Éu,t �5��� |z � � p �>* �)k � ¨�w ��� ¨!sqv �� sqv#° �q���N� � } v ��� | ���L� u � wy|z � v�s � |z � } s{�X�$|$v � } |$sqvI��w�� � ±

�jw ����� � � � � � � s � �9�Nsq| } z � �Nx � |z �&�X� �w } � � | � v � s �c� � �q� x ��� v � w } ��� | � | u4t �qñ |z � u � v � �w��ªt � u �} s{�4° � ��w � �4|��$u>�4| �M¥]� sqv � }�} � ��w��Nx�|z � } s{�ªt1s{� � �4|�ls ������� | � �$|$v � } | � v �¬� uP� � � � v � |z � v�|z � � � u�t1s{�wy|wys{�2±£ z � u½� � �q� } s{���$|$v � } |$sqvI�9¨�w�|z~� � �4u } s{�9t�s{� � ��|���ªsqv � � � � � x ��� �X�y� �Iw�� } � ì ����� � } � � �1�L�q������� sqvv � �ªs@° ��� ¨�wy|zNs � | } z � �Nx{w���x � ° � vubv ���7� v � � } � |$sU|z � } s{���$|$v � } |$sqv�±&�Nsqv �7�X���g�N� | � w � �]s � ì �����¾��� ����� � � � �|z � wyv#� � � � ��|w } � � � ��� È � } |wys{� @ ÂN± ç,± � ±

�+0�� � � <�A�C�� �� � ��4 �VI � < �BC�� 4�<�I

Þ � | � �$|$v � } | � v � �¬w�� �T� � �q������� v � x � � � v �q��� uíÚyÙ ��á¯j|z � } s{�ªt1s{� � ��|� � v � �Nsq| � ° �q����� | ���©� �4|w � � �����N��� ± £ z�w��t � vI�9wy|���$|$v � } | � v � �`|z � | } s{�4| � w�� ���y� � � �4|�©¨�z�w } z � w ��� ° �q����� | ���2� ¨*s �������y���q� |$s � � � vvsqv©sqv �7� w � |$s| � vI�9w�� � | � ±*Ç � %�u ��� | � �|$v � } | � v � � � ��z � � } � |z �]�K¥ t�v � ��Iwy° � � � ���s �/�T� � �q������� � �L� v �]� � � �� � ��|w �q��� �$t � } |s � |z �P�T� � �q����� t�vIsqxqv � �9�9w���xG�|Éu �y� ±

  ��| � vC� �q��� u �1��� } z¤ì ����� s �¬�À��� %�u ��� | � s �>®$� } |�w��T¨#v � t�t ���§� t¤w�� � �$|$v � } | � v � } s{�9�ªs{� � u&v ���7� vv ��� |$s� � � Ï K�Ó>ÎNæL|z � | � � } � tX� ����� | � �c|z � } s{�ªt � | � |wys{� ��� ìX��w��Nx�|z � ì ����� ° �q���N� ± £ zXw��T|z � � � w��c�Nsq| � ��| � v ���� �4|w � |z � ° �q���N� w���� �����N���2ñ |z � � � �T¨�z�w } z } s{��| � w�� � vIvsqvI� ¢ �P¦ � sí�Nsq| � H � } |�sq|z � v ���y� � � ��|�cs �S�À��� | ��$|$v � } | � v � ±¾�Nsqv �K¥N� �ªt ���q� |z � | � t �y� ~�m 3 m y � � w�� � t � v �=� } | � u �y� x �q�S��� � �q����� ° �q���N� ± £ z � m 3 m�� � u �1�� � ��� ¨�wy|zNs � | � w��| � v � w���x�|z � sq|z � v } s{�ªt1s{� � �4|!s � |z � | � t �y� ±/ÆLs{�$|*t�vsqxqv � �9�`w��Nx ��� ��x ��� x � � � v � âKÏeÐCÕÖÔ�Ïw����| ���q� s �1��� %�u�¯l|z � |/w�� �{�q��� } s{�ªt1s{� � �4|�js ���c��� | � �$|$v � } | � v ��� v � v ����� } ��� |$sT° �q���N� � �1��� sqv �S�1� w��Nx�t ��� } ���w��À|z � �$|$v � } | � v � ±

£ z � v �U� v �§� � � � �1� v`s � s\° � vCz ���q� � � ��$s } w � | ��� ¨�wy|z�|z � � � ��¯§|z � u½| � �q� |w�� � |$s } s{�X�$|$v � } | � � �� ° �q����� | �q� |z � u~s }�} � t4u×�$t � } � w���|z � z ��� t ��� � � |z � u } �q� � � |z � x � v �� x � } s ���y� } |$sqvÀ|$sËv � | � w��×sq|z � v�$|$v � } | � v � �G� �����N���^� sqvª|z �À� ° �q����� |wys{�^s � |z � |z � � � ± £ s � °qs{w � |z � � � s\° � vIz ���q� � � âBÏeÐBÕeÔ\ÏeÎ�ãBâCâ���Ù�Ü âGw��

Page 30: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ë � � ! ���i�. ����R�. ��i�.

�)3�(83[�N� } ��� v � |wys{�X� �q��� s\¨ �$t � } wyì } ì ����� �9s ��� } s{���|$v � } |$sqvÀ|$s �1�U� ° �q���X� | ��� w��9� ��� w � | ��� u � � ���y� } |wy° ��� u� � tXt�v � ��w��Nx ��� %�w�� � ���± � ì ����� � � v �q���L� u � w�� � �)3�()3`�N� } ��� v � |w�s{�&w�� � ° �q����� | ��� ¨�z � �í|z � �$|$v � } | � v � w��} v ��� | ��� w����$| ���q� s �g�N����� u ��� w�� � |z � � � ±

£ z � v �P� v �]� � � � �1� v�s � �w�| ��� |wys{���S¨�z � v � wy|#� � u �1�P� t�tXvsqt�vIw � | � |$s � � � �$|$vIw } |� � �� �X� x{��¯

� È>|$v � } | � v � } s{�ªt1s{� � ��|�!|z � | � v � � � v � |$s �1�#� ° �q����� | ����� |S�$s{� � t1s{w���| ��� vIw���x�t�vsqxqv � � �K¥,� } � |w�s{�2±

� È>|$v � } | � v � } s{�9t�s{� � ��|��|z � | � v � �w��ªt �y� |$s � ° �q����� | �]� � � � � ° � v } �q� � �P� vvsqvI��±

� £ u,t � ��w��À¨�z�w } zÀt � v|w �q��� u � � �N� ìX� ��� ° �q���N� � � v � ��sq|�� ��� ��w���x �7��� ±

�Nsqv �K¥>� �ªt �y�q� |z � } s{�ªt �y�K¥ � � � �1� v � w � v � vIu �N� ìX� � �#|z �i�*< �)+�9*7 p |Éu,t �P� ��¯�)3�(83 " 71319 � 9*<13�( 3 � s �1< �)+�9,7 p 3 � � 3 - u �"3

Á �Nsq| � |z � w��Nì ¥¾�N� ìX�Xwy|wys{�bs � |z � } s{���|$v � } |$sqv - u ± à £ z�w�� ��� ìX��wy|wys{�é� � v � �]|z � |ɨ*s } s{�ªt1s{� � �4|� � |z �v ���q�/� � � w�� � x{w�� � vIuLt � v|� � s � |z � } s{�ªt �y�K¥ � � � �1� v � � �1� w��Nxí�$|$vCw } |�± £ z�w��cw�� � �9sqv � } s{�ªt � } |Pv � t�v � Ä� � �4| � |wys{�Às � } s{�9t �y�K¥ � � � ��� vC� �� |!|zXw�� } s{� � � � |S|z �c�K¥ t � ��� � s � � � � w���x � } s{�ªt ���K¥ � � � �1� vS¨�wy|z � �� � ��� ìX� ��� } s{�ªt1s{� � �4| � v - u � � sqv �K¥N� �ªt ���q� |$sq| �q��� u � � �N� ìX� ���~¢ �P¦C± � ��|z � v � w��]��s&v ���q� � �����¾� sqvt � v|w �q��� u �N� ìX� ��� } s{�ªt �y�K¥ � � � �1� vI� � wy|*� � �q� �*� � ��� � |$s � � � �$|$vCw } |� � �� �X� x{�*|$s � } z�w � ° ��� �ªsqv �T� J } w � �4|v � t�v � � � ��| � |w�s{�2±

È,|$vCw } |� � �� �X� x{�í� � u �1�¤� � ��� |$s �q��� v � ��À� � �ªsqvu �y��� � ��¯[�$|$v � } | � v � �©v � | � w�� ��� � u�|z � x � v �X� x �} s ���y� } |$sqv �X� |#�Ns � s{�Nx � v�� � } � �� � vu � sqv } s{�9t � | � |wys{�2±

£ z � �$|$vIw } |� � �I� �X� x � �� } � �bs{� � u � tXt ��� vPw�� ��3�()3&�N� } ��� v � |w�s{����±   | } � ���Nsq| �1�9� � ��� w��¤sq|z � v]| u4t ��wyx{� � | � v � �ísqvLw�� � ��u sq|z � vU|Éu,t �¾��� ìX��wy|wys{�X��± £ z � v � w��L�Ns } sqvv � �$t1s{� � w��Nx˨ � u |$s�� � v �×�7� � } |wys{�� vx � � � ��|� � � �1� w���x��$|$vIw } | �>�q� |zNs � x{zÀ|z � � � � �c� H � } | } � � �1� s � | � w�� ���À� �w��Nx]|z � 4�7 6 sqv ���G�7� � } |wys{����±È ��� @ ÂN± ç,± �]� sqv �7� v|z � v �N� | � w � ��±

  |�w�� � w&J } ��� |�|$s§t�v � � � �4| �K¥N� } |Gx � w �N��� w�� � � � sqv�|z �©� � � s � �$|$vIw } |� � �� �X� x{��± £ z � u¾�IzNs �����b�1�©� � ���¨�wy|z } �q� |w�s{�2¯ ��� %�w�� � ��cw��cs{� � s � |z �ª�e� � ��� � � ��| �q� t�vsqt � v|w � ��s �S�T� � �q�����g� � �b�q��� w��NxÀ�$|$vIw } |� � �I� �X� x{�� � u �����q� |$s`z � v � |$s`ìX� � w��Nì��wy| �c� s4sqt��sqv�z � ° � sq|z � v � � �K¥ t � } | ��� } s{�X� � ê ��� � } � ��±

� ³�´ Yª¹�µ���]�¹�µ Yª¹�µ

£ z �   « ¼ �$u>�$| � � w�� ��� � �q����� w��Tt � v ��� u �7� � } |wys{� �q�Ö� u � |Pz � � �q��� s � |z �ª�K¥ tXv � ��wy° � t1s\¨ � v � s � � � w�� } s{�>Ä° � �4|wys{� �q� t�vIsqxqv � �9�9w���x ��� �Nx ��� x � ��±   �¾w��ªt � v � |w�° �G��� �Nx ��� x � � � tXvsqxqv � �9��tXvs } ����� °,w � Ù�Ô�ÏeÕÖÑ ÎNâ9¨�z�w } z�K¥N� �9w�� �`� � � �ªs � w � u§|z � } � vv � ��|��$| � | � s � |z � ¨*sqv ��� ± £ u4tXw } �q�/� } |wys{����w�� } ���X�N� v ���q� w���x � � � � � |$|w��Nxx � s �X�q� ° � vIw � ��y� � � ¨#vIwy|w��Nx]ì ��� � � v ���q� w��Nxªw���t � | �>� � � sqt � ��w��Nx�¨�w�� � s\¨���±¬È � } z � } |wys{��� � v �P�q� �$s � t � v|�s ��T� � �q�����2�X� | � v � } �y��� � � u�� � t � v � | ���&� vs{��|z � t � v ��� u �e� � } |w�s{� �q� } sqv � s � |z �]��� ��x ��� x � ±

�T� � �q�����ÖÌ �   « ¼ �$u,�| � � w�� �� w � | � vs � � � � �$s{� � ¨�z � | ���q� �4|w��Nx�� � |z � � � |w } �q�G� s � � ��� |w�s{�2¯ |z �Ý9Ñ ÎÙ{Ò�± � s\¨ � ° � v �c� � �N� vC�$| � � � w���xbs � |z �U� � �N� v � u>w��Nx¾�9s{� �q� |z � sqvu�w��©�Nsq|À� � } � �� � vu�|$s[t�vIsqxqv � �� �w��Nx�|z �   « ¼ �u,�$| � �&±j¿ � |z � v � �ªs{� �q� � � v ��� } s{� } � t�| ���q� �$|$v � } | � v � w��4|$sP¨�z�w } z   « ¼ z � t�t � ���j|$s�ìX|�±   |w��S�Nsª�ªsqv � � � } � �� � vu�|$s � � �N� vI�| � � � �9s{� �q� |z � sqvu�|$sªt � v � sqvI� �T� � �q�����   « ¼ |z � �íwy|�w��*|$s � � ��� vI�$| � � �xqvs � tL|z � sqvu©|$s � s9�w��ªt �y�c� vIwy|z�� � |w } ± � �N� | � w �y���À�K¥ t ��� � � |w�s{�Às � �9s{� �q� �#w�� � s � � � w��LÈ � } |wys{� � ±

Page 31: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�$��� ��� ���9��! ��� ����� �!�9� �'��� ë �

£ z � �ªs{� �q� w } sqt � v � |$sqvI�#|z � |�|z �   « ¼ð�$u>�$| � � w�� �X� w � | � t�s{� � v �]�q� �$s � � ���í� sqv�sq|z � v�t � vt1s{� � � ñ ¨ �¨�w ���2� s4s � �ªsqv ���N��� t � uÀw���|$s`�9s{� �q� � ��� | � v�±#�Nsqvc�Ns\¨ � ¨ � ¨�w ���2� °qs{w � |z � | � vC� �ªs{� �q�§� � � } s{� } � ��|$v � | �s{�©|z �c� � � s � |z �   « ¼ �$u>�$| � �í±   | Ì � �1� �$|*|$s�|z�w�� � s � |z �   « ¼ �9s{� �q�À� �*�Iw��ªt � u � � � � �$|$v � } | ��� | � | u4t � ±

� } |wys{��� � v �]�N� ìX� ��� v � |z � v�|z � �&w��4°qs �q��� ¨�wy|z�w��©|z �P�K¥ t�v � �I�wys{� ��� ��x ��� x � s �g��� � �q����� ± h¬° �q����� |w��Nx|z �G�N� ìX��w�|wys{�ís �/� � � } |wys{� � s � �� Ì | � } | �X�q��� u } �q� � � |z �G� } |wys{�§|$s©z � t�t � �2±#¿ � |z � v � |z � w��4°qs } � |w�s{�Us �� } |wys{����| � �q� �#t ��� } � s � |�w ��� s � |z ���K¥ t�v � �I�wys{� � ° �q����� |wys{�À¨ � z � ° � } s{���Iw �N� v ���í� tí|$s�|z�w��St1s{w��4|�±

� } |wys{��� � v �ª� wy|z � v � |$s{�9w } ��� � �N� ì� ��� w��b�$u>�$| � � t�vCw��9wy|wy° � � � sqv � v �9� � � ê �N� �4|w �q� } s{�ªt1s{�wy|wys{�¤s �sq|z � v � } |wys{����± £ z �   « ¼ �ªs{� �q� } s{�4| � w����!t�vIw��`wy|wy° � �j¨�z�w } z �� w ��� } s{�ªt1s{�w�| ��� } |wys{��� �,� t�vs } � ��!�Iw��9w ��� v|$s ® s{w���w��NxÀ�$| � | � � � �4|�]w��b� � ê ��� ��|w �q� sqv �N� v � �w���x � � Ì w��¤sq|z � v ��� ��x ��� x � ��± £ z � �c|z � �ªs{� �q� � � vI° � � � �|z � x ���N� ¨�z�w } z � w�� � �!|$sqx � |z � v�|z �]� } |w�s{����w�� � tXvsqxqv � �í±

� 021 � I A2C ��� =HG�< �>AT4 �BI

h/° � vIu   « ¼ � } |wys{�bv � | � vI��� � ° �q���N� ±   �¤|z � |Éu,t � �$u>�$| � � � |z � v � | � vI�¤° �q���N� w�� � | � xqx ���2Ì ¨�wy|zX�>,í| u4t �q�� w��|w��Nx � w��Iz�w��Nx � } |w�s{��� � vs{��sq|z � v�° �q����� ��±/�Nsqv �K¥N� �ªt ���q� |z � |Éu,t � s � |z �P�e� � } |wys{� >�7�()��'�3�= w���¯>�7�()��'�3�= -1- �>, �I'�3�=

£ z � �>, �I'�3�= w�� � w } � | � �c|z � | >�7�()�I'�3�=�� ¨�z � �bw���°qs �q���2� t � v � sqvC�9�c�$s{� �9� } |wys{�b¨�z�w } z¤v � | � vI��� � } z � v$Ä� } | � v�± � } |wys{�X�S¨�z�w } zÀv � | � vI�À�Ns9w��4| � v � �$|w��NxG° �q����� � � � � |z �P� ��w�|*| u4t �q� ~ � ±¬��sqv �K¥>� �9t �y�q� |z ��+ ��()��'�3�=�e� � } |wys{�2¯+ ��()��'�3�= -1- �I'�3�= q1s �>, ~ �

| � �q� � � } z � v � } | � v � � � � � vx � � � �4| �X� |�v � | � vI���c�Nsq|zXw��Nx � � ���7�X� ± £ z ��� ��wy|�| u4t � w��T�w��9w ��� v�|$s �)< � � w��sq|z � v ��� �Nx ��� x � ��±

� } |wys{��� � v � � � ê ��� � } ����� �w��Nx � ��sqt � v � |$sqv�|z � |�z � � � v � |z � v } vu4tX|w } � � � � ¯ s1s � ¢ sqv � � w�� ��Ì ¦C±   �X�$| ���q�s �P� �w��Nxb|z�w��`sqt � v � |$sqv � w�v � } | � u � ¨ � } z�s4s{� � �$s{� � �$u>��| � } |w } � � x � v � |z � ��< �Nsq| � |wys{� � |$s^z�w �N� |z � � �� � ê �N� � } w���x�sqt � v � |$sqvI� � � �N� v � �$u>��| �M¥ v � � � � �X� w��Nx��ªsqv � } s{�4° � �4|wys{� �q����� �Nx ��� x � ��± £ z ���1< �Nsq| � |wys{� } � ��1� |$vIwy°>w �q��� u �K¥ t � � ����� |$s s1s � �X� � �N� � } vCw �1��� w�� @ ë,± � ÂN±

£ z ���q� u,¨!sqv � �1< w���|$vs ��� } � � � � � ê �N� � } � s � �$| � | � � � ��|��¨�z�w } z � v �c�K¥>� } � | ��� w���sqv �N� v�± � �$| � | � � � �4|w�� � wy|z � v � � � } |w�s{� ��� t � |$| � vI� � s � � � |$sª|z � v � � ��� |*s ��� � � } |wys{� � �w��Nx 2*q � sqv � � � |Ss ��� s } �q�1�N� ìX�Xwy|wys{���w��4|$vs ��� } ���À� �w���x 9*7�( ± £ z � ��< �Nsq| � |w�s{� � � � � ��� uqs � |�w��©|z � � � � � � � ��� � v � � 9,7,( sqv � '87,=)7 �$sG¨ � } � �s{�9wy| � v � } � � � � � � � �9w } s � s{���T¨�wy|z¤t�vIsqt � v�w�� �N� ��| � |w�s{�2± ��� v � w�� � �w��9t �y� tXvsqxqv � � |$sív ���q�b� � � |z � �t�vIw���| � } z � v � } | � v�¯

�`3 � � -1- �>, ~ ��`3 � � � ��< � 2*q >�7,(���'�3�=

+ �)(���'�3�= �£ z �T� � � s � |z � � � � � ��3 � ��w��!w��ªt1sqv| � ��|�¯ �`3 � �`w�� �N� ìX� ��� |$s ��� |z �T� ��|$vu`t�s{w���|!s �l���T� � �q����� t�vIsqxqv � �¢ �w��`w ��� vc|$s&|z � �`3 � � �e� � } |w�s{�bw��ér#¦ �l� � � � � �$|�z � ° �`� �n� ,&|Éu,t �q��� � �X�q��� u �>, ~ � ± ¢e£ z � � � � � ��3 � �w����$t � } w �q� s{� � uÀw��í|z � �ªs �X���y� � 3 � � ñ ¨ � ¨�w ��� z � ° � �ªsqv � |$s©� � u � � s � |��ªs ������� � ��� | � v�± ¦ £ z�w���t�vIsqxqv � �t � v � sqvI�9�c|ɨ*s � } |wys{�X�]w��b� � ê �N� � } � ¯]ì�vI�$|�wy|�v ���q� �Pw�� � } z � v � } | � v ��� w�� � w��Nx`|z � v � � ��� |T|$sL|z � ° � vCw � �X�y�} ��� � � |z � �×t�vCw���|��|z � } z � v � } | � v�± ��� � w �q�¤� 9*7�(½�K¥ t�v � �I�wys{��¨�z � v � ° � vCw � �X�y� � � v � � } sqt ��� s@° � v �q����N� ìX�Xwy|wys{��� � |z � ° � vIw � ��y� � �N� ìX� ���À� u 2*q � v � s{� � u�w��í� } sqt � w��À|z ��� s ��� s\¨�w��Nxª�$| � | � � � �4|��±

Page 32: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ëqç � ! ���i�. ����R�. ��i�.

£ z � v � w����$|w ��� s{� � �9w���Iw��Nx�tXw � } � ±gò � } � �Lw���°qs �q��� } |wys{��� � � �À�K¥>� �9w�� � |z � wyv�v � � ��� |� � �w��Nx �1<����X� |zNs@¨ � sÀ¨ � v � | � vI� � ° �q���N�G� vIs{� � � � ê �N� � } � s �S� } |wys{��� " ��sqv �K¥N� �ªt �y�q� } s{���Iw �N� v�|z � =)713�� �&�7� � } |wys{�|z � |#v ���q� � � } z � v � } | � v � � � v � | � vC��� �*=���7 w � |z � } z � v � } | � v�¨ � � � � u Ì ¯=)713�� � -1- �>, ��<1<19=)713�� � � ��< � 2*q >�7,(���'�3�=

� �.� m � m q1q �)3���� � �£ z�w�� � s � �I� Ì |�¨!sqv �©�1� } �q� � � |z � � � } s{� � �$| � | � � � �4|Tw��À|z � � � s Ì w�� ®$� �$| �ª� s4s ����� �À° �q�����q� �Nsq| � � � } |w�s{�2±ò � � ����� |$sª| � �q� |zXw�� � s4s �y��� � � � � } v ��� | �P� � � } |wys{�À|z � | � s � ���Nsq|z�w��Nx �� |Sv � | � vI�©|z ��� s,s �y��� � � �#wy|�v � � �X� |�± £ z � =)7�(��)= � �e� � } |w�s{� � s � � ®$� �|�|z � |�¯=)7�(��)= � -1- 3 q1s � , 3

£ z �.=)7,(!�)= � �e� � } |wys{� } s{�ªt �y� | � �¬|z � � � |/s � � � ê �N� � } w��Nx�t�vIw��`wy|wy° � ��± £ z �#��� �$| � w�� � s �`=�7�3�� � �zNs ����� v ���q�=)7�(���= �j~e� � �jm � m � ±

ò ��� v � �Ns\¨ v ���q� u©|$s � s,s �©� |��ªsqv � } s{�ªt � w } � | ���   « ¼ �e� � } |wys{����±j�jwyvC�$| � |z �P�e� � } |wys{� >�7,( ( � � 7 ¯>�7�( ( � � 7 -*- �>, ��(*= � � >>�7�( ( � � 7 � ��< � 21q >17,()�I'�3�=

� * � �.�jm o ��m(�'�7 � =)7,(!�)= � � �71984�7 ��<r9 21q >17,( ( � � 7

=)7�(��)= �j~�� -09 �'�sq| � |z � � � } s{� � ��< w���|z �L��� � � } ���q� � � ± h � } z �1< w���|$vs ��� } � � � �w��Nx �y� } z � w���s � �$| � | � � � ��|��± � ��uw��4| � v° � ��w���x } s{�X�$|$v � } | � � � } z � ��|z � � * � � � �$| � � �P� � � ¨ ��< |$s©w���wy|w � | �T�e� v|z � v#� � ê ��� � } � ��s �g� } |wys{����±

£ z �i=)7�(���= � �7� � } |wys{� �q� �9wy|� � �Usqv � w�� � vu©° �q���N� � � } z � � �`� s,s �y��� �&|$s©|z � v ���q� � s �   « ¼ � } |wys{�X��±ò z � | � � s � |�|z � sq|z � v � wyv � } |wys{� "¤r � �L¨ � w���°qs �q� �$s{� �   « ¼ � } |w�s{����¨�wy|z�w�� � �&sqv � w�� � vu �K¥ tXv � ��wys{� "�Nsqv �K¥N� �ªt �y�q� zNs\¨ } � ��¨ � � � u p u +�= � � (�� w�� � � �K¥ t�v � ��Iwys{�P�$sT|z � | � w���t�vIw���| ��� s � | � ��|z �¬�K¥ t�v � �I�wys{�� ° �q����� | � � " £ z �9� ���$¨ � v]w���|z � |]¨ � } � � Ì | �   |Pw��ªÎÑ{Ïct�s{�I�w �X�y� |$sL�� ��� � w���|$s&|z � w��ªt � v � |wy° �9� �Xwy° � vI� �¨�z�w �y� w���|z � �9w � �$|!s � t � v ��� u �7� � } |wys{� �q� } s ��� ± � �4u9° �q���N� � w�� �7� } | ���2Ì4� u9|z � w��ªt � v � |w�° � ¨*sqv ��� � � �$| �1�| � xqx ���§� ��� � } z2± � �7� � } |wys{�í� � } z � �

* -1- ��� ( q1s ��� ( q1s ��� (� � �$s ��� | ��� u } � ���Nsq| � s � �4u   « ¼ �w�� } � �>, � s � ���Nsq| � t�t ��� v�w��é|z � v � | � vI� ��� | u4t � ± £ z�w�� �e� } |�w��]s � | � �ê � wy| ��� w��$|$v � ��Iw��NxG|$s�tXvsqxqv � �9� � vC� � � ��� |$s©t ��� } w��Nx`t�vIw��4|��$| � | � � � �4|� � w �1� v �q��� u`|zNvs � x{zNs � |�|z � wyv } s �N���� vCw��Nx �N���� xqx{w��NxN± £ z � v �G� v �q� w�� �7� } | � �s{� ��� ��� � �7���e� � } |wys{�X� � ° � w ��� �X�y� |$sÀx � | � vs � � � |z�w���tXvs �X�y� ��X� |T|z � � �9� v ���1� |$| � v �y��� |c|$s �q� ° � � } ��� t�vsqxqv � �9� � vI��±]Þ ���X� xqx{w��NxÀt � } � � x � � ¢e� w �q� �1=83 � 7 ¦�s � | � �b� � �q�� w �1� v �q�1� � � s � |z � � � � � sqv � w ���N� � �e� � } |wys{�X� Ì w�� � � � �4|wyv ��� u©� � �7� � � ��� � v\±

� 0 / 3 <�4 ��< : : A ����� A��>? �EC��>AT4 �VI

  « ¼ � } |wys{��� � v � sqv � w�� � vu �T� � �q����� ° �q���N� ��¯�|z � u9� � u �1� t � �� ��� |$s �e� � } |wys{�X� � t ��� } ��� w��9�$|$v � } | � v � � �,� � �� � ���L� � � ��uÀsq|z � v ��� � �q����� ° �q���N� ±!r*s{���Iw �N� vS|z�w�� � w��$|Ss ��� } |w�s{����¯

Page 33: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�$��� ���J���\� �9� �'�x� � � �.� � ��� ëqë

()<���< ( � 46( -1- wc�>, ~ �6}()<���< ( � 46( � w + �)()�I'�3�= m 3 m y

�1< + �)(���'�3�= m��m+ �)(���'�3�= m���m y

�1< � 21q >�7�()��'�3�=+ �)(���'�3�= � }

£ z�w�� � w��$| � s � �� Ì | � } | ���q��� u§w���°qs �q�`� �4u � } |wys{��� � wy|P�w��ªt � uLzNs ��� �c|z � �í± £ s ® s{w��b|z � � �`� } |w�s{���Pw��4|$s ��w���x �y��� } |wys{� �X�ª�e� � } |w�s{�í� � } z � � 4I7 6 �87 ��� 7 � w��#� ��������� ¯4�7 6 ��7 �`� 7 � -1- wC� , ~ �2} q1s �>, ~ �4�7 6 ��7 �`� 7 � w } � =)7�(��)= �j~ �4�7 6 ��7 �`� 7 � ~ 3�-"384 � � ��< 3

4I7 6 �87 ��� 7 3)4£ z�w�� } � � �1� �w��ªt � wyì ����� uª�Nsq|w���x�|z � | ��< p � � w�� �K¥ t � � �N��� |$s prs1s �í¢ � ��� È � } |wys{� � ± � ¦C± £ z�w��jt � |$| � vI�s � v � } � vI�w�s{�©w�� } � tX| � v ���í� u`|z � * <�9 �*=9�e� � } |wys{� ¢ � ��� |z �P� v �����X�N��� sqv �ª�N� ìX�Xwy|wys{��s � * <19��*= ¦ ñ��G�1� |$| � v�N� ìX�Xwy|wys{�©s �4I7 6 ��7 ��� 7 � w���¯4�7 6 ��7 �`� 7 � -1- wC� , ~ �2} q1s �>, ~ �4�7 6 ��7 �`� 7 � � * <19��*= ~ s1s8� ~ =�7,(���= ��~ �1�

£ z � ��< �Nsq| � |w�s{��w�� �¾� � ���7��� |$s,s �S�X� |9w��Ë|z�w�� } � � � |z �&� � �N� v � u>w��NxL�9s{� �q� w } sqt � v � |$sqv � s*s � w��ª�ªsqv �� t�t�vIsqt�vIw � | � ± � � � � �N� vI�$| � � � w��Nx¾s � |z � sqt � v � |$sqvI� � t1s{��¨�z�w } z ��< w�� �X� w � |�w��Àê � w�| �§� � ���7��� |$s^|z ��T� � �q����� t�vIsqxqv � �9� � v�±

£ z � 4I7 6 ��7 ��� 7 �G�7� � } |wys{� } � � �1��� � ��� |$s } s{���$|$v � } | + �)( ��(1=9� vIs{� + �)()�I'�3�= ¯+ ��( ��(*= -1- ��(*= � � > q*s �>, ~ �+ ��( ��(*= 4 � 4�7 6 �87 �`� 7 � ~ �`32+ + ��()��'�3�= 4 �

¼c� � s � |z �9� w&H � v � � } � � ��� | ¨ ��� � ��� � �q�����/� � � } s{�4° � ��|wys{� �q� w��ªt � v � |w�° � tXvsqxqv � �9�9w��Nx } � � �1� � ��� �¾w��+ ��( ��(1= ±   � � �~w��ªt � v � |wy° �í��� ��x ��� x �q� � � tXtXw��Nx � �½w��ªt � v � |w�° � ° � vC�wys{�^s ��+ �)(���'�3�= s@° � v`|z � �|$vIw��Nx¨*s �����À�1� � � J } w � ��|�|$s9tXvIw��4|Sw�|�±   � ��� � �q�����Ö� zNs\¨ � ° � v � |z � �`32+À�7� � } |wys{� � s � �#�Nsq|�t � v � sqvI� � �4u � } |w�s{�2±  ���$| ���q� wy| } v ��� | � � �í� w��$|cs �S� } |wys{��� � s{� �ª� sqv ��� } z } z � v � } | � v�w��¤|z � �$|$vIw��NxN± £ z �G� s ��� w��Nx©sqt � v � |wys{�bw��4�7 6 �87 �`� 7 �9� � � ��|z � s1s �7� � } |wys{�U|$s } s{� � w�� �G�q��� s � |z � w�� � wy°>w ���X�q��� } |w�s{���cw���|$s � �w��Nx �y��� } |wys{�2± £ z �=)7�(���= �j~ � � � ��� z � v � w��9ê � wy| � � � } � �� � vu��"* <�9��,= � ����� � � � �����S� } |wys{� � |9|z �í� � � s � |z � } z � w��½s �� } |wys{����wy| } v ��� | � � ¢7� �$t � } w �q��� u©w � |z � v �P� v � �Ns } z � v � } | � vI�Tw��À|z � �$|$vIw��Nx � ¦C±

£ z �L� v �������N�í� � � |z �L� w � v � vIw � � } s{�4| � w����`� � ��u �e� � } |wys{���9¨�z�w } z � v �L� � ���7���#� sqv©� � ê ��� � } w��Nx   « ¼� } |wys{����± £ z � � �P� v ��� � ���q��� u9x � � � v �q� w&% ��� |$s � v � wy|$v � vu��ªs{� �q� � ñX� �4u �7� � } |wys{�À¨�wy|z � } s{��| �K¥ |�w�� } ����� w���x� < � 3 � � � s ¨!sqv � ��¨�w�|zÀ|z � �>,G|Éu,t � ±

� 0�� � ��C�G�= �>AT4 ��� � �V62A ���

È,s �e� v � ¨ � z � ° �U� °qs{w �N��� |z � w��� �N� s �T�K¥ } � t�|wys{�X� ��� vIw��Nx   « ¼ sqt � v � |w�s{����±~ò z � |9¨*s ����� z � tXt � �½w �>�7�()�I'�3�=í� � } s � �4| � vI� � � � � � s � ì �y� "IF � £ s �N���q� ¨�wy|z �K¥ } � t�|wys{� �q� } s{� � wy|wys{���T� � } z � � � ì �y� �Nsq| � s � � �2Ì� �XP �� �[ �@QTS2�BQ � £�0 ����2�/� U ��£��C��¢�¡"�A�2�6� Q ���A� W�S2��¡�SZ¡0¢��6�2�]Q���� £ �"¡ ���A� £ �0� U £ � 0 [  6¡�SZ¢ [��6�A� �NQ ��£�0.� �2¢]Q ���A�i��£+ZI¢]Q9Q ��£ �

0P¢]Q ¡2S UG¢���¤� 6£ �A¥�-Y�¡"�\Z�Q ������[ �I��� QTS6��� QTS2��£�SI¢��2���6¡0¢�������¡0¢� �-�S Q�¢��2� SI¢C�I��¤ �"� Wz� QTS2��� QTS6� 0� � 0.���I¢��,¥

Page 34: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ëM � ! ���i�. ����R�. ��i�.

¨�wy|zXw��P|z �   « ¼��9s{� �q�2�{� z � � ��� w��Nx#� � } z � ��w��� w�� � � ����� �Iw��9w ��� v�w�� �7� � } |wys{� �q� wy| u�|$sc|z � s{� � w����$| � � ��� v �ÆUÇ/± '�sU�t � } w �q� �$u>��| �M¥ sqvG� � � � �4|w } � � v ��� � ���2ñj�K¥ } � t�|w�s{�éz � � �X� w��Nxíw��]t � v|Ps � |z �©�N� ìX��w�|wys{�¤s � |z �  « ¼ � � ê �N� � } w��Nxªsqt � v � |w�s{����±h¬vvsqvI� � v �c� � } s �N���À� �w��Nx � �t � } w �q���� | � |Éu,t �q� � , �*=1=)<�= ± £ z�w��!|Éu,t � v � t�v � � � ��|� �q��� t1s{��w ��y�#�K¥ } � tNÄ

|wys{���¬|z � |S� � u9s }�} � v*¨�wy|z�w��G|z �   « ¼ �9s{� �q� ± £ z�w��!w�� � � � � �$|$v � } |!| u4t � ¯g�Ns } s{�X�$|$v � } |$sqvI� � sqv��>, �1=1=�<,=� v �T� ° � w ��� �X�y� |$s]|z �T� � � v�± � v ��� w } � | � � �q��� s\¨ � , �1=*=)<�= ° �q���N� �/|$s �1� ê ��� vIw ��� ±j�Nsqv �K¥>� �ªt �y�q� |z ���7� � } |wys{�� 4 � ,!� �1=*=)<,= -1- �>, �1=1=�<,= q1s �)<*<�9

�N� | � vI�`w�� � �*¨�z � |z � v � � � vIvsqv�¨ � � } �q� � ���í� u � � � � � Äds � Ädì ��� } s{� � wy|wys{�2± Ê uÀ� � � w��Nx��>, �*=1=�<,=`� � �|$v � } | �� � ¨ �$sqv|�*s ��� vIvsqvI�*� � u ���T�q���N��� |$sG|z � �$u,�| � � ¨�wy|zNs � | � �Nsq|w } ��� �X�y� } z � �Nx � |$s�|z ����� | � |Éu,t � ± £ z ��e� � } |wys{� � 4 � ,!� �1=1=�<,= w�� �N� ì� ��� w�� � � � t � v � | �©� w � v � vIu � � , ��� � � � � �| �1�ª�K¥ t � w } wy| � u§w��ªt1sqv| ��� w��4|$s �t�vsqxqv � �í±

� �[ãcd4ÔCã B�ÏeÕeÑqÎ K,Ù ÎÒ>Ú�ãKÐ#z � �#|Éu,t � � , �1=*=)<�= q1s � , 3 ± £ z � � 3�( � 'í�7� � } |wys{� � ��$s } w � | � � � � �K¥ } � tX|wys{�z � � �X�y� v�¨�wy|z � � � } |w�s{�&sqv�� � |�s ��� } |wys{�X��¯� 3�( � ' -1- �>, 3 q*s ~��>, �1=*=)<,= q1s �>, 3 � q1s � , 3

£ z �P� vIx � � � �4|�#|$s�� 3�( � 'À� v �]� � � } |wys{� � � �L� z � � ����� v�±   � |z �P� } |wys{�U� � }�} ����� � � wy|��v � � ��� |#w��Sv � | � vI� ���¨�wy|z�s � |�w��4°qs � w��Nx§|z � z � � ���y� v\±   ��� � � vvsqvGs }�} � vI� � w�|�w���t � �� ��� |$s¤|z � z � � ���y� v � � � ° �q���N� s � | u4t ��>, �1=*=)<,=©� � � |z �G� } |wys{� � ��$s } w � | ��� ¨�wy|zL|z � z � � ���y� v�w���|z � �§w��4°qs �q��� ±���sqv �K¥>� �ªt �y�q� |z�w���° � vI�Iwys{�Ls �>�7�()�I'�3�= v � | � vI�X� � � � ¨ � w�� � ¨�z � � � � � vvIsqv�w�� � � } s � ��| � v ��� ¯>�7�()��'�3�= m -1- �>, �I'�3�=>�7�()��'�3�= m � >�7�()�I'�3�= � � 3�( � ' � ~ o 7 q*s =)7,(!�)= � m o ��m �

£ z�w���w���v � |z � v } v �X�N� �Iw�� } � wy|�|$v ��� |� �q����� vIvsqvI�Àw���|z � � � � � � � ��� � v\±   � s{� � u � � � Äds � Ädì �y� w��`|$s �1�v � } sqx{��w?% ���2� |z �P� vIvsqv�° �q���N� � � �$| �1� ê �N� vCw ��� ¯>�7�()��'�3�= m -1- �>, �I'�3�=>�7�()��'�3�= m � >�7�()�I'�3�= � � 3�( � ' � 7*< * � 3 � �)9,7,= � '�7�=)771< * � 3 � �)9,7,= 7 � � * � 4 �)< * �1=*=)<,= 7 (,'�7 � =)7�(���= � m o �m 71984I7 � < �*=1=�<,= 7

£ z � � < �1=*=)<�=©�e� � } |wys{� � � ��� z � v � |zNvIs\¨�� � � �K¥ } � t�|wys{�§s{�U|$s`|z � � �K¥ | �K¥ } � t�|wys{�§z � � ���y� v\± £ z � | u4t �s � � < �1=*=)<�= w��� < �1=1=�<,= -1- �>, �1=*=)<,= q1s �>, 3

  |�w��j�w��9w ��� v�|$s =)7�(��)= � �K¥ } � t�|g|z � |jwy|�|$v � ��� �7� vI� } s{��|$vs � |$sc|z �*�K¥ } � tX|wys{�ªz � � ����� v�w����| ���q� s � t�vs } ����� w��Nx|$sT|z � � �K¥ |   « ¼ � } |wys{�2±�' � �$| ��� } �q��� �l|$sZ� 3�( � ']� v � t � vI�9wy|$| ���2� � � � t�vs ��� } � � � �$| ���]�K¥ } � t�|wys{�Gz � � ���y� vI��±�T�w��Nx >�7,(���'�3�= m � ¨ � } � �&v ���N� ì� � >17,( ( � � 7 |$s �N� �ªs{���|$v � | � |z �P� � � s � � � �$| ��� z � � �X�y� vI��¯>�7�( ( � � 7 m -1- � , ��(*= � � >>�7�( ( � � 7 m � � 3�( � ' >�7,( ( � � 7 m*m ~ o 7,=*= q1s =�7,(!�)= � ~�� �*=1=�<,=- � u1u 4�'8< � 7�=1= �*�

� '�7�=)7>17,( ( � � 7 m*m � ��< � 2*q >�7,(���'�3�= m

� * � �.�jm o ��m (,'87 � =)7�(���= � �,�7�9)4�7 ��< 9 2*q >�7,( ( � � 7 m

=�7,(!�)= � ~�� -"9 �

Page 35: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�$��� �+� � ���e� �+��� �3����� �e� � � ��� � � �.� ��� ë�#

£ z � � � �| ���À� vvsqv�z � � ����� vI� �q��� s\¨ >�7�()�I'�3�= m/|$s } � | } z � � � s � ì �y� ¨�z�w �y��� �4u�sq|z � v � vvIsqv�v � � ��� |�*w�� ��$|$vIw��Nxª�$| � v|w��Nxª¨�wy|z � �*=1=�<,=- � � vIs{� >17,( ( � � 7 mI±

�Nsqv } s{�4° � ��w � � } �q�>��� � �q����� t�vIs\°>w �N� � �P�����7�q��� | �K¥ } � t�|w�s{�`z � � �X�y� v � |/|z � |$sqtX�ªs{�$| �y� ° ��� s �2� t�vIsqxqv � �|z � |#tXvIw��4|�Ss � |�|z �P�K¥ } � t�|wys{� � � � | � vI�9w�� � | � �#|z � t�vIsqxqv � �í±

� 0�� � A262GLI�� � ? � �BGL62I�� � � � � �B62GLI

� �w �N�À� vs{� |z �   « ¼ �ªs{� �q�~� � � |z �í�K¥ } � t�|w�s{�½z � � ��� w��NxU� � } z � ��w��I� wy|ªt�vs@°,w ��� � �   « ¼ �7� } w � wy|w � �Gw���T� � �q�����/� v �`� sqvP|z � �ªs{�$|Pt � v|Pê � wy| � �w��9w ��� vc|$s&|zNs{� � w��¤sq|z � v ��� ��x ��� x � ��±©Æ � �4u§s � |z � � �`�7� � } |wys{���� v � w��¤|z � � , � w � v � vuLw��X�$| ���q� s � |z �`� v �������N�ª� � � |z � �P� � �$| �1�ª�K¥ t � w } wy| � uUw��ªt1sqv| ��� |$s �1� w��b� } sqt �¢ �ªs �����y� � � � � w��ªt1sqv|w��Nx � v ��� w�� } � �I� ��� w��UÈ � } |wys{� �q� ¦C± ��� �s � � � �4uís � |z � � ���7� � } |wys{��� � v ��� w�� } � �� ���w��À|z � Çlw � v � vu`¿ � t1sqv|#w����$| ���q� s � |z � � � w��Àv � t1sqv|�±

¼Tt � ��w��Nx � ì �y� } v ��� | � � � K,Ù Î�Ò>Úyã ¢ s � | u4t � � 3 � �)9,7 ¦ � sqv � � � w��   « ¼×|$v � �X� � } |wys{����±!r � s{�w��Nxc|z � z � � ���y�} � s{� � ��|z �P� ��$s } w � | ��� ì �y� ¯

(���+�7 � � 9*7!*83�(�' � ��(1= � � > q1q +�3�(,' � 3 ��7�4 � � (,'�7 * � 9,7 4 ��46()7 �<�+87 ��� � 9,7 -1- � � 9*7!*83�(,' q*s �>, � < �17 q1s � , � 3 � �)9,7'��19*<�4I7 -1- � 3 � ��9*7 q*s �>, ~ ��)3�(83 �>, � <���7 � " 7�3�� � <���7�� �1= � (�7 � < ��7 � � +1+87 � � � <���7 � " 7�3 � �1= � (�7 � < ��7

�T� � ���y� � } � � �q� �$s �1�¬� �I�$s } w � | ��� ¨�wy|z©Ô K,Ù Î�Î1ãKÚ â{¯ } s{�9� � ��w } � |w�s{�]t1sqv|���Nsq| � wyv � } | � u � |$| � } z ��� |$s�ì �y� ��± ��7� ¨ } z � ��� ��� z � � ���y� � � v � tXv ���N� ìX� ����� w�� } ���X� w��Nx 42( � � � ¢ �$| � � �X� v � w��Nt � |C¦ �z42( �1< ��(b¢ �$| � � �X� v � s � |$t � |C¦ �� � � 42( �17,=*= ¢ �$| � � ��� v �~� vvsqvK¦C±×rSz � v � } | � v �y� ° ���   « ¼ sqt � v � |w�s{���9w�� } �����N�V'�%�7�()��'�3�=[� � � ' *���()��'�3�=��¨�z�w } zÀ| � �q��� z � � ���y��� � � � � vx � � � �4|�± £ z ��>17,(���'�3�=9�e� � } |w�s{� � � ��� t�v � °,wys � � � u } � � �1�P�N� ì� ���í� ��¯

>�7�()��'�3�= � '�%�7,(���'�3�= 46( � � �

�T� � �q�������q� �s �q��� s\¨���|z �P� �4|wyv � } s{�4| � ��|��s �g� ì �y� sqv } z � ��� ��� |$s �1� v � | � vI� ���í� � � �w��Nx ��� �$|$vIw��NxN¯

>�7�()�1< � (�7 � (�4 -*- � 3 � �)9,7 q1s � , ��(1= � � >

� v � x{� � |w } �q��� u � wy|9� � uË� ��� � |z � | >17,()�*< � ()7 � (�4 � � �$|9w��9� ��� w � | ��� u¾v ���q�½� � � ��|wyv � ì �y� sqv } z � �X� ���Ö�v � � �X� |w��NxÀw��¤t1s4sqv��$t � } �`� � � |w�� � t � v � sqvC� � � } �9� � ��� v } � v| � w�� } s{� � wy|wys{����± � s\¨ � ° � v � |z�w���w�����sq|P|z �} � � � ± £ z �c�q� u�t1s{w��4|�w��S|z � | >�7�()�1< � (�7 � (�4 v � | � vI��� �b�$��� %�u ¡&¢ wÖ± � ±¬�Ns{�NÄÉ�$|$vIw } |C¦ � w��$|!s � } z � v � } | � vI� ¢ v � } �q���|z � |��|$vIw��Nx{� � v ��®$� �| � w��$|�*s � } z � v � } | � vI��w�� ��� � �q����� ¦ � ¨�zNs{� �����y� � � �4|� � v � v ���q���Å� u �N� � � � ��¡�®$� �$| � w �q�� �4uísq|z � v � w��$|�± � �&w��ªt �y� � � �4| � |wys{� } � � �����K¥ t � } | ��� |$s©w��ªt ��� � � ��|S|z�w�� �N� � � � � Ä � vIwy° � � �1� z � °,w�sqv � uv ���q� w��NxGs{� � } z � v � } | � v � | � |w�� ��� vs{��|z � ì �y��� �#|z � u � v � v � ê � w�v ���©� uÀ|z � } s{�ªt � | � |wys{�2±

  �í|z�w�� �K¥N� �ªt ���q���9��� � �q����� t�vsqxqv � � } sqtXw � ��s{� � ì �y� |$s � ��sq|z � v�¯

Page 36: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ë � � ! ���i�. ����R�. ��i�.

�`3 � � � ��< * =)< � � 3 � ��9*7 2*q >�7,( � � � , +87 � � � 9,7 � �1<I+ � * =)< ��- � " 713�� � < �17(�< � 3 � ��9*7 2*q >�7,( � � � , +87 � � � 9,7 � �1<I+ � (�< - � ��= � (�7 � <���7� < � ()7 � (�4 2*q '3%�7�()�*< � (�7 � (�4 * =)< � � 3 � ��9*7' *���( ��(*= ()< � 3 � �)9,7 � < � (�7 � (�4'8��9,<�4�7 ()< � 3 � �)9*7+ �)( ��(1= ��� < � 7�: �

>�7�( � � � , +�7 � � � 9*7 -1- ��(*= � � > q*s �>, � < �17 q1s � , � 3 � �)9,7>�7�( � � � , +�7 � � � 9*7X+)=)< �)+�( ��<���7 �

��< + ��( ��(1=N+�=)< ��+)(� 3 ��7 2*q >�7,( ( � � 7� 3�( � ' ~ <�+87 � � � 9,7 � 3 ��7���< �17 �

~ o � q1s ��< + �)( ��(1= (,� ~*� �13 �1� <,( <I+�7 � � u1u � 3 ��7 u1u � o � � �>17,( � � � , +�7 ��� � 9*7X+)=�< ��+)( ��< ��7 �

Ê u � �w��Nxé|z �¤��� %�u >�7,(��1< � ()7 � (�4§�e� � } |wys{� � |z �U� �4|wyv � } s{��| � �4|�ís � |z � ì ��� � ����� �Nsq| �1� v ���q� w��4|$s� � �ªsqvIu �q���g� |]s{� } � ±   ��'�*!�)( ��(1= } z�s4s{� � �]|$s �X� H � vP|z � s � |$t � | � u§¨#vIw�|w��Nx©|z � �$|$vIw���xÀw��¤ì ¥,��� �w&% ����X� s } � �*s � } z � v � } | � vI� � s{� � u9s{� �c�X� s } � s � |z � w��Nt � |¬ì ��� � ����� �S|$s �1� w���� � �ªsqvu � |Ss{� } � ± £ z � w��Nt � |!ì �y�w�� } � s{� ��� w��ªt � w } wy| � uG¨�z � �í|z �P��� �$| } z � v � } | � vcz � � �1��� �ív ���q� ±

� 0�� � I���GJ626 � � ��:;=HG�< �>A��7G 3�<>4 ��< : : A ���

� � � ì� �q� ��sq| �q�   « ¼�t�vsqxqv � �`�9w��Nx[v � w�� � � � � w��ªt1sqv| � �4|Àw��� �N� ¯é|z�w��À�$|Éu �y�b� s,s � �À� � �$tXw } wys � � � u � w �q�sqv � w�� � vu�w��ªt � v � |wy° � t�vsqxqv � �`�9w��NxN±g�Nsqv �K¥>� �9t �y�q� |z ��>�7�( ( � � 7ª�e� � } |wys{��¯>�7�( ( � � 7 � ��< � 2*q >�7,(���'�3�=

� * � � �jm o �m(,'�7 � =)7�(��)= � � �7�984I7 ��< 9 2*q >�7,( ( � � 7

=�7,(���= �j~e� -"9 ��1��� vI� � �$|$vCw � w��Nxª�w��9w ��� vIwy|Éu`|$s`w��ªt � v � |wy° � } s �N��¢ �Nsq|�w�� � ��uÀv ���q�l��� �Nx ��� x � ¦T¯

* � �`� ( � < � >�7�( ( � � 7 ~ � �� - � >�7�()�I'�3�= ~ � �� * � � � �co � � (,'�7 � =)7�(��)= � � �

7�984I7 � 9j- � >�7,( ( � � 7 ~ � �=�7,(!�)= � � -09 � �

È,s � w��À|z ��� � �2� z � � ��� � �q����� �w��ªt � u9v � ÄÉw��4° � �4| ��� |z � w��ªt � v � |wy° � ¨�z ����� "  ���s{� � � � ��� �q� u � ��± £ z �   « ¼ �ªs{� �q� } s{���$|w�| � | � � � �� �q��� w��9t � v � |wy° � � ��� Ä ��� �Nx ��� x � w����w �N�#��� � �q�����Ö�

� � � |z � �c|z �   « ¼ } s{�ªt1s{� � �4|cs �!� t�vsqxqv � � � � u � t�t ��� vc�Iw��9w ��� v�|$sísqv � w�� � vu&w��ªt � v � |wy° � } s �N� ± ÊS� ||z � v � w��gs{� � w��ªt1sqv| � ��| � w&H � v � � } � ¯ £ z � v � w��/�Ns��$t � } w �q� � � � � �4|w } �/|z � |/|z ��� � � v¬� ����� �g|$s �N���q� ¨�w�|z2±   �t � v|w } ����� v �{� ê ��� |wys{� �q� v ��� �$s{��w��Nx]w�� �T� � �q����� w��/�Nsq| } s{�ªt�vs{�`w�� ��� ± £ z � w��ªt � v � |wy° ���7����� s � |z � �9s{� �q� w }} s �N� w�� � t�vsqxqv � � � s � ����sq| �N� |$v � } | � vs{� |z �*�7� � } |wys{� �q��� �t � } |�s �X�T� � �q����� ± � � �K¥ t � vIw � � } �����7� � } |wys{� �q�t�vsqxqv � �9� � v��IzNs �����½�1�L� ��y� |$s^�9w���w��`w&% � |z � w��9t � v � |wy° � } s{�ªt1s{� � �4|`s � |z � t�vsqxqv � � � s{� � u � �w��Nx

Page 37: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ë ï

|z �   « ¼��9s{� �q�¾� sqv � �`w���w�� �q�j� �ªs � ��|Ps � |$sqt�Ä �y� ° ��� � � ê �N� � } w��NxN± £ z � �ªs{� �q� } ����� � � u¤� � t � v � | � ��|z ��e� � } |wys{� �q��� � � w��ªt � v � |w�° � t�vsqxqv � � } s{�ªt1s{� � ��|��±   � } s{�4|$v � �$| � w��ªt � v � |w�° �T��� ��x ��� x � �*¨�wy|z �7� � } |wys{� �q�� �N� � � |� � sP�Nsq|jx � � � v �q��� u]z � ° ��� ��u�¨ ����� Ä �N� ìX� �����X� vvCw � v �1� | ¨ ��� �ª|z � t � v ��� u �e� � } |w�s{� �q�4� � � w��ªt � v � |wy° �¨*sqv ��� ��±

� ��µ`M#´G¸ M�¶2¸�� M.S���Q�OCO � OCM.S�S�Q;S

  �¾|z�w��]� � } |wys{�¾¨ � w���|$vs ��� } � |z � t�v ����� ìX� ��� �$| � � �X� v � | u4t � } ��� �I� � �]w�� ��� � �q����� ±Àò � z � ° � �w��ªt � wyì ���|z � � � } ��� �� � �g�$s{� � ¨�z � | � uPs{�9wy|$|w���x��$s{� � s � |z �*�y� �I��w��4| � v � �$|w��NxT� � |zNs � ��w���|z � � � } ��� �� � � ñ |z �S��� � �q�����v � t1sqv| } s{�4| � w���� � �ªsqv � } s{�9t �y� | ����� � } vIwyt�|w�s{�2± ��� �s � �s{� � s � |z � �$| � � ��� v � } ��� �� � � � v � t � v|�s � |z ��$| � � �X� v �&�T� � �q������� w � v � vIw � � ñ |z � � ��� v �]�N� � } vCw �1��� w��À|z �]�T� � �q����� Ç�w � v � vu©¿ � t1sqv|�±

�+021 ��� � 62A!�$8 � � <���GL<>G�� � 6 I I�GLI

£ z � } ��� �� � � � 6 � � � , = � z � ° �é�q� v ���q� u ����� � � w�� } � �� ��� ± £ z �b�N� ìX��w�|wys{�~s � , = � w���|z �b� v �������N� w���$s{� � ¨�z � |]�ªsqv � } s{�9t �y�K¥ |z � �b|z � �Iw��ªt � w�ì ��� ° � vC�wys{�¤s � , = � tXv � � � �4| ���¾��� v � w � v�±   �bt � v|w } ����� v � �Nsq| �|z � � < ��+�3�=)7 � � |z�s � ¯

�)3�(83 , = ��7�= � � > � ��� ( � ��% �� < �)+�3�=)7 -1- , = �r3 � s 3 q1s 3 q*s , = �17,= � � >

£ z � � < �)+�3�=)7 � � |zNs � w���� � J } w � �4|*|$s ��� ìX� ���q��� sq|z � v�� � |zNs � � ¢ °,w �G�N���e�q��� |�B¦*w��©|z�w�� } ��� �� � � � w��S|z ��1� �$|�¨ � uÀ|$s } v ��� | � , = � w����$| � � } � ��±

�+0 / D ?�G�� � �V:;G�< �>AT4 � � 6! I I

r ��� �I� � � � � z � � � � � |]s � sqt � v � |wys{���P|z � | � � �N� v � w � |z � �$u>��| � } |w } � � x � v�s ��� vIwy|z�� � |w } � � ê �N� � } � � ñg� sqv�K¥N� �ªt �y�q� |z �P� vIwy|z�� � |w } � � ê ��� � } �P�K¥ t�v � ��w�s{�rw vzyc| :1: } �$| � � � � � sqv 7 � � � � =)< �3�,'87 � v | ¢ � ���V@ ë,± � � � sqv|z �§� sqvC� �q� |$v � ��� ��� |wys{��¦C± ò � } � � �Ns\¨ � ��� |z � | � vIwy|zX� � |w } � � ê ��� � } �U�K¥ t�v � �I�wys{��� } � � ���§� � ��� |$sx � � � v � | �G� w��|��s �g� ��uí| u4t � |z � |Tw�� � �§w����$| � � } � s � � � � � ± £ z�w��#w�� } �����N� ���Nsq|�s{� � uí�ªs{�$|T� � � � vIw } |Éu,t � � ��X� | �q� �$s ��'�3�=X� �sT|z � | ��� sqvjw����$| � � } �q� w�m 3 m :*: m � m } ��� �Nsq| � �g|z ��� w��|ls �� s\¨ � v$Ä } � � ���y� |$| � vC�gw�� �q� tXz � �1� |w } �q�sqv �N� v\±`� � v|z � vI�ªsqv �q�j� � � v$Ä ��� ìX� ���¤� � � � � v � | ��� |Éu,t � � � w �q�V�1<19*<,= } � � ��� �Iw � u ��� x{w�° � � � � � � w��X�$| � � } ��N� } ��� v � |wys{����±   � �sN¯

w " 7 �j:1: ) � <�9*7�( } % w " 7 � y %*=�717 � y �)9 ��7 y ��� � � >�< y ) � <19*7�( }'�sq| � |z � |*� � } z � � � ê �N� � } � w��cÙ ÐCÕeÏ K�Ý`ã�ÏeÕÖÔ�w��`|z � � � ��� � |z � |!|z � w�� } v � � � ��| �1� |ɨ ��� ��° �q���N� �*w�� } s{���$| � �4| �� ° � �§|zNs � x{zU|z � ° �q���N� � � v � �Nsq|�� � � �1� vI��±�ÆLs{�$|�| u4t � �cw�� � � � � } � � �1� � � t�t ��� s{��|$s©ì ¥>��� t�v � } w��wys{�w��4| � x � vI� ñ�� sqv#|z � � �q� |z � * =�< � � � � �&� � ��()< � � � � } s{�4° � v| �1� | ¨ ��� � ��� (©� � �í� |Éu,t � w�� � � � � ±

�+0�� D ?�G�� G � � � �+?B4 � � 6 I I�GLI

£ z � w����$| � � } � ��s � } ��� �I� �2'�< � � v � |z�s{� � |Éu,t � �P|z � | } � � �1� } s{��° � vI| ��� |$s } z � v � } | � vG�$|$vIw���x{� ¢ |Éu,tXw } �q��� u� sqv   « ¼P¦C± £ z � } ��� �� " 7�3 � t�vs@°,w �N� �/sqt � v � |wys{�X� � sqv!t � vC�w��Nx } z � v � } | � v#�$|$vCw��Nx{�/|$s�s � | � w���|z � ° �q����� �¬|z � u� � u©v � t�v � � � �4|�± £ z � �Iw��ªt �y� �| �e� � } |wys{�íw��À|z � } ��� �� �2'�< �Àw�� 4�'8< �¯

Page 38: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

ë î � z ������P����� ��� ���� � � ����������

4�'8< � -1- ~ �2'�< � 3 � � s 3 q*s ��(*= � � >' � | � v �q��� u � �Ns � x{z � 4�'�< �À| � �q� � � �4uÀ° �q����� s �g� � � tXt�vsqt�vIw � | � | u4t �]� � � v � | � vI����w�|��v � t�v � � � ��| � |wys{� � � �} z � v � } | � vP�$|$vIw���x ¢e� w��|#s � } z � v � } | � vI�C¦ ��� �cw�� 4�'�< �j~ {,u�{�� � ¨�z�w } z&v � � ��� |�Tw��2� � �M± £ zXw���w���ìX� ��� � �e� v � �wy|�xqs � � �X�� |�¨ � |Éu,tXw } �q��� uÀ� ����� |$s`t�vs ��� } � �ªsqv � } s{�ªt �y�K¥ �$|$vIw���x{��|z � |�� � uíz � ° � |z � v � t�v � � � ��| � |w�s{���s � � � �4u�° �q���N� �#w��À|z � � ��� ��w��

� ��'�7 4�� � < * � u*u 4�'�< � p u1u � 3 � � � u1u 4�'8< � � u*u � � 4 � u1u 4�'�< �j~ p1u � � u*u � : �� � �¾� � | � v � ¨�z�w �y�q���q��� |z � | } s{� } � | � � � |w�s{�éx � |��|$s �1�9�í� wy|�w�� � J } w � �4|�±©È,t � } wyì } �q��� u ���y� | Ì � } s{���w �N� v ��e� � } |wys{�L|$s`v � t�v � � � ��|�|z ��� w�� � vu©|$v ��� ��s � È � } |wys{�§ç,± ç,± �G� � � �$|$vIw���x � ¨�wy|zU� � wy| � �X��� � � v � w��Nx{��|$sÀ�zNs@¨|z � � � �|w��NxGs � � �N� |$v ��� � � � � |z � � � t � v � |wys{�Às �g�y��� | � � � vIwyx{z4| � v � � } z � � ¢ t�vs@°,w ����� |z �����y� � � �4|#|Éu,t � w��v � t�v � � � ��| � ��y�P� � � �$|$vCw��Nx4¦C¯4�'8< � �*=)7*7 -1- ~ �2'�< � 3 � � s �1=)7*7 3 q1s ��(*= � � >4�'8< � �*=)7*7 ~ ( 7�3 * p�� � 4�'8< � p4�'8< � �*=)7*7 ~ �*=83 ��� 'r9 = � � � 2 � u1u 4�'�< � �1=�717 9 u*u � � � u*u 4�'8< � �*=)7*7N= u1u � s �

Ê*� } �q� � � ~ u*u�� z � �¬|w�� � } s{�ªt �y�K¥ w�|Éu � w�� ��� v!w��`|z ���y� ��xq|z`s � wy|� �y��� | � vx � � � ��| �`4�'8< � �*=)7*7 w��¬t�sq| � �4|w �q��� uê ���q� v � |w } w��À|z � �w&% � s � |z � |$v ��� ±

£ s9v � �$|$sqv �]� w�� ��� v } s{�9t �y�K¥ wy|Éu � |z ���7� � } |wys{� 4�'�< � 4 w���t�vs@°,w �N��� ¯4�'8< � 4 -1- ~ �2'�< � 3 � � s 3 q*s ��(*= � � > q1s ��(1= � � >

4�'8< � 4 | � �q� � � tXvIw��4| � �X�y� ° �q���N�]� � �U� �$|$vCw��Nx � � � v � | � vI�X��|z � |c�$|$vIw��Nxª¨�wy|z&|z � ° �q���N�qÌ �#v � tXv � � � �4| � |wys{�} s{� } � | � � � | ���b� |T|z ��� vs{�4|�± £ z � � � } s{� �§� vx � � � ��|c� � v° � � � � � �$sqv|Ts � �$|$vIw��Nx � }�} � � ����� |$sqv �2� � � 4�'�< �} � �b�Ns@¨ ���G�N� ìX� ���§� � 4�'�< � 4 ¨�wy|zU|z � � �X����� }�} � � ����� |$sqv�± £ zXw���w���|z �ª�N���e�q��� | �N� ìX�Xwy|wys{�Us ��4�'8< �Lw��|z � �I'�< � } ��� �� �N� ì��wy|wys{�2¯4�'8< � p � 4�'8< � 4 p � �

ò � } � � � � ��4�'8< � 4 |$s �N� ìX� �*� �ªsqv �¬� J } w � �4|�° � vI�wys{��s � 4�'�< � �1=�717>� ¨�z�w } z �q� �$s�z � � � �|$vIw��Nx � }�} � � ����� |$sqv� vx � � � ��|�¯4�'8< � 4 �1=�717 -1- ~ �2'�< � 3 � � s �1=)7*7 3 q1s ��(*= � � > q*s ��(1= � � >4�'8< � 4 �1=�717 ~ ( 713 * p�� 4 � 4�'8< � 4 p 44�'8< � 4 �1=�717 ~ �1=)3 �`� ' 9t= � 4 � m 2 m - 4�'8< � 4 �1=�717 9 ~�m � m - 4�'�< � 4'�*=)7*7 = ~)m s m - 4 �*�

£ z�w����$s � ° � ��s � v � J } w � � } uÀt�vs ��y� � ¢ 4�'�< � 4'�*=)717 z � � � w�� ��� v } s{�ªt �y�K¥ wy| uN¦ ���� |�|z � t�v � � � ��| � |w�s{�ís � |z�w���e� � } |wys{� ¢e� � � sq|z � vI� � w �q� wy|C¦ } � � �1� w��ªtXvs\° ��� ±/�jwyvC�$| ���y� | Ì � } v ��� | ��� |Éu,t � �$u>�Ns{�4u,�í¯(���+�7�I'8< � � � ��(*= � � > q*s ��(1= � � >

£ z�w���w��G|z � |Éu,t � s �c�¤�e� � } |w�s{�^|z � |ªv � | � vI�X� � �$|$vIw��Nx¤v � tXv � � � �4| � |wys{�½s � �$s{� � |z�w���x � s ��� s\¨ ���^� u � �� }�} � � ����� |$sqvc�$|$vIw���xN±SÈ � } s{� ��� ¨ � } � � � °qs{w � } � vIvu,w��Nx � }�} � � ����� |$sqvI� � vs � � ���X� � �L�q� �$s � °qs{w �L� � � ��Iw��Nxt � v � �4|z � � � � � |#|z � vIw�x{z�| � � � s �j� s{�Nx } s{���$|$v � } |w�s{��� ��� u � �w��Nx �e� � } |wys{� �q� } s{�ªt1s{�w�|wys{�2¯4�'8< � 4 �1=�717 -1- ~ �2'�< � 3 � � s �1=)7*7 3 q1s �I'8< � �4�'8< � 4 �1=�717 ~ ( 713 * p�� � 4�'8< � 4 p4�'8< � 4 �1=�717 ~ �1=)3 �`� ' 9t= � � ~)m 2 m - � : 4�'�< � 4'�*=)717 9j: ~)m � m - � : 4�'�< � 4 �1=)7*7 = : ~)m s m - �

È,s{� � |zXw��Nx`�ªsqv � w��ªt1sqv| � �4|#|z � � ®� �$|#|w � u,w���x � tL|z � } s ��� z � � } s{� ��� � s � | � uí|zXw���|$v � ��� � sqvI� � |wys{�2¯¨ � z � ° � v � w�� ��� |z � tXv � � � �4| � |wys{� � vs{� � �½Ñ�����ãÔ\Ï!Ú�ã f ãKÚ ¢ w��&|z�w�� } � � �q� �$|$vIw��Nx{�C¦S|$s � DCÓ>ÎÔ\ÏeÕeÑ ÎbÚ�ã f ãKÚ��Tò �} � �U|z�w�� � s � |z � |Éu,tXw��Nx � �T� � u,w���x`|z � | 4�'�< � 4'�*=)717 � � tX� � |$v ��� w��4|$s � â]K,Ñ � Õ=Î4Ü�DCÓ>ÎÔ\ÏeÕeÑqÎ�±#� � � } |w�s{���

Page 39: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ��� ��J��� � � � � � �[��J��� �+�� ������� ë �

� w �q� ~)m 2 m - � sqv�~*� 3r46(1= � � > � u1u�� � v � tXvIw��9wy|w�° � �zNs@¨�w��Nx �e� � } |wys{��� �,� � � ¨ �c�X� w ����� tÀ�ªsqv � } s{�ªt �y�K¥�e� � } |wys{��� � u �7� � } |wys{� } s{�ªt1s{�wy|wys{��±

'�s\¨ |z � |]¨ � } � �[| � vI�¤|$v ��� ��w��4|$sL�$|$vIw��Nx{� ����� | Ì �P| � vI�¾|$sL|z � w���° � vI� � t�vs �X��� �í± £ z �`�X� �w } w ����� w��� t � vI� � v � sqv � | u4t �x3>� ¨�zXw } z[w�� �U�7� � } |wys{�¾|z � |]| � �q� � � �$|$vIw��Nx � � � v � | � vI��� �U� w��$|Ps � ~ 3 y ��(*= � � > �t � wyvC�PÁ � Ãd± £ z ��� v �������N� t�vIs\°>w �N� � � | u4t � �$u>�Ns{�4u,� � sqv�� � } z �e� � } |w�s{����¯(���+�7 " 713�� � 3 � ��(*= � � > q*s wI~ 3 y ��(1= � � > �2}

'�sqvI� �q��� u �{� t � vC� � vjv � | � vI��� � �w���x �y� |$s{� � w��$| � } s{�4| � w���w��Nx � ° �q���N� s � |Éu,t ��3 |z � |j¨ � �gv ���q��� vIs{� |z � w��Nt � |�$|$vIw��Nx � � � |z � v � � � w���w��Nx��$|$vCw��NxT|z � | � s ��� s\¨���¨�z � |�¨ � �gt � vC� ��� ±   � ��sTt � vI� � ¨ � �/t�s{�I�w �X�y�q� zNs@¨ � ° � v � |z �v � � �X� |�w���|z �]� �ªt�| u � w��$| �� � � w � |z � v � w����ªsqv � |z � �&s{� � t�s{�I�w �X�y� t � vC� �©¢e� � � � � wyx � wy| uN¦ � |z � v � � ��� |w��Nx� w��| } s{��| � w����!�9sqv � |z � ��s{� � t � wyv�± £ z � �$| � � ��� v �`�7� � } |wys{� =)7�3 ��4 w�� � t � vI� � v � sqv � �4u9w����$| � � } � s � " 7�3�� ¯=)713���4 -1- ~ " 7�3 � 3 � � s " 7�3 � � 3

ò � } � � � � � |zXw�� �e� � } |w�s{�&|$s �N� ìX� ��� t � vC�w��Nx �7� � } |wys{� � sqv�|z � �$|$vCw��Nx`v � t�v � � � �4| � |wys{�§s �g� w�� � vIu©|$v ��� �t�vs ��� } ���Ë� u 4�'8< � 4 �1=�717 ±^Çlw��| } s{�9t�v � z � ���Iwys{����x{wy° �&� � � } s{�4° � ��w � �4|`w � w�s{� � sqv } s{���$|$v � } |w��Nxb� � } zt � vI� � vI��¯GF =)713���4 �1=�717 -1- ~ " 7�3 � 3 � � s " 7�3 � � ~ �1=)7*7 3 �=)713���4 �1=�717 ~�m 2 m -�4 � � wI~ �1=)3 �`� ' 9t= y � � � ~ 9 y m � m -�( � 21q =)713���4'�1=�717 4 y

~ = y m s m -�� � 21q =)713���4'�1=�717n( }=)713���4 �1=�717r4 � wI~ ( 713 * p;y ( � � ~ p�y ( � 21q =)713���4 4 }

Ç � | Ì ��| � �q�&� �ªs{� � �4|�|$s �K¥N� �9w�� � |z�w�� �7� � } |wys{� �N� ì��wy|wys{�[w�� �N� | � w � ± £ z � v ��� v � |ɨ*sb� � w�� } � � � ��|$s} s{���w �N� v�¯   � |z � ì�vC�$| } z � v � } | � vTs � |z � �$|$vIw���x�|$s ��� t � vC� ��� w��[m 2 m � ¨ � �IzNs ����� z � ° � |z � v � tXv � � � �4| � |wys{�s ����� v � � } z ñ sq|z � v¨�w�� �q� ¨ � z � ° �T�]�y��� � ±   �ª|z � ì�vI�$| } � � �q� } �q��� w��Nx�|z � v � �$|¬s � |z � w��Nt � |j�|$vIw��Nx � s ��� s@¨�w��Nx|z � sqt � �Xw��Nx � �Nx �y��� v � } �q� | 4,�X� ��uít1s{��Iw �X�y� t � vI� � � � �$| �1�]� |$v ��� �1=)3 ��� ' 9N= ¨�wy|zív � � � w���w��Nx9�|$vIw��Nx�2� � �N�>®$� } |�|$s`|z ��� s ��� s@¨�w��Nx } s{� � wy|wys{����¯

� ± £ z � |$v ��� 9 } � � �1� t � vI� ���À� vs{� |z �P�1� x{w�����w��Nx]s � |z � �|$vIw��Nx 4 ±ç,± £ z � �$|$vCw��Nx]v � � � w���w���x ¢7� s ��� s\¨�w���x]|z � v � t�v � � � �4| � |wys{�©s ��9 ¦ �1� x{w����¬¨�wy|znm � mC±!r �q��� |z � | � w � s � |z�w���|$vIw��Nx ( ±

ë,± £ z � |$v ����= } � � �1� t � vI� ���À� vs{� |z �P�1� x{w�����w��Nx]s ��( ±ÂN± £ z � �$|$vIw���x�v � � � w���w���x � vs{��|z � |#t � vI� ���1� x{w��X�S¨�wy|ztm s m �X� � �&� w���|z � | � w � ±

'�sq|w } � |z �#�K¥ tXv � ��wy° � t1s\¨ � v¬¨ � x � | � vs{��|z � } s{� � w�� � |wys{�9s � t � |$| � vC��� � | } z�w��Nx�¨�wy|z � w��$| } s{�ªt�v � z � �>Ä�wys{��¯#|z �G� sqvC� s �!� v � � ��� |w���x`t � vI� � w���x{wy° � � � u&|z � � � w�� �K¥ t�v � ��w�s{�Ls � |z �ª� w��$| } s{�ªt�v � z � �X�wys{� � |z �ì�vI�|¬|ɨ*s } s{� � w�|wys{��� � � s@° �c� v �T�K¥ t�v � �I� ���`� u9|z � ì�vC�$|¬x � � � v � |$sqv ¢K� ~ 9 y m � m -�( � w�� � v � ¨�� � vs{� |z �c� w��$|s � t � vI� � �#s � 4 ¡ ¦ �X� � � |z � v � � � w���w��Nx } s{� � wy|wys{�X� � v �P�K¥ t�v � �� ���À� uÀ|z � � � } s{� � x � � � v � |$sqv�±

£ z � � � } s{� �9�N� ì��w��Nx � ê ��� |wys{� � � s\° �/®$� �$|g� � u>�/|z � |¬|$sPt � vI� � |z � v � t�v � � � ��| � |wys{�`s ���]�y��� � � ¨ � t � vI� �� v � t�v � � � �4| � |wys{�§s � |z �]����� � � ��|T|Éu,t � s � |z � |$v ���G� � �L� tXt � uÀ|z � } s{�X�$|$v � } |$sqv�( 713 *©|$s`|z � ° �q���N� |z � �s � | � w�� ��� ±� + . ��� �e�"�50.��£ � �"¤�� -e¢C� Q;¢ Z�Z6£ �e¢C¡�S Q � ZI¢C£T[ ����-� �[ �X[ 0.�A�2¢A��[�¢��2� Z2¢C£T[ � £�¡ � 0��6���I¢]Q �C£T["¥ + S2�\[ ��¢C£ � Z2¢C£9Q�� U ¢ [�Q�¢��2�2¢c£��

ZI¢c£T[ ���.-¤����6£�¢c£ ����� [�Q £ ���6 �Q �0� Wz�RQTS�0.��[�Q ��¢][ �e�"¤�¤.[E�&[�Q �10H["¥

Page 40: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

 � � z ������P����� ��� ���� � � ����������

ò �qÌ ���T� }�} � t�|©s{� �e� wy|z � sqv`|z � �ªs{� � �4|`|z � |`|z � v � w�� � " 7�3 � ¢e� � ���2'�< ��¦ªw��X�$| � � } � s � ��� ()7*>17,=¢e� �ªs{�Nx�� � ��uÀsq|z � v�|Éu,t � �B¦ � t�vs@°,w � w��Nx �R=�7�3���4 |z � | �1� z � ° � � � �#s{� � ¨!s �����À�K¥ t � } | ��� ±èxN±y¯~ =�7�3 ��4 ��k >1<�9 ��7 � = � � >�4 � � -*- wI~���� (�7*>�7�= y ��(1= � � > �2} % wI~�k y � >1<�9��17 � = � � >�4 � �2}

ò wy|zí|z�w�� � � �N� vI�$| � � � w��Nx � |z � v ���q��� v��zNs ����� ° � vCw � u©|z �P� s ��� s@¨�w��Nx � ° �q����� |wys{�X��¯=)7�3 ��4 �1=)7*7 � 2�v � 21{ � |�s*s � % w2~ �*=83 ��� ' ~ ( 713 * v,� ~ �1=)3 ��� ' ~ ( 7�3 * {�� ~ ( 7�3 * |��*� y �,� �2}=)7�3 ��4 �1=)7*7 � 2�v � { � % w }

£ z � v �9� v �`� } s � t �y� s � �IzNsqv| } s{�9w���x{�Pw��¤s � v ��� ìX��wy|wys{�§s ��=�7�3���4'�*=)717 ±�¼c� � w��c|z � |P|z � t � vI� � v]w��ê � wy| � vIwyx{w �2���q��� s@¨�w��Nxª�Ns9¨�z�wy| � �$t � } �]����� sqv � sqv �1� |ɨ ��� �&|z �P����� � � ��|��s � |z � |$v ��� v � t�v � � � �4| � |wys{� ñ |z �sq|z � vPw��c|z � |T|z � ¨ � uU¨ � t � vI� � s � vct � � } | ��� |wys{�¤�$u>� � s � �cw��cê � wy| �ª� wGH � v � �4| � vs{� |z � ¨ � u¤¨ � t � vI� ��y��� � ° �q����� � � � � � �N� |$v ��� � � |z�w�� ��� } � s ��� ��w � sqvI�9wy| u`� � � w��NxG|z �c�e� � } |wys{� �N� ìX�Xwy|wys{�Àz � v �N� vS|$sªv ���q� ±/ò �} � � �q�X� v � �� � sq|zís � |z � � � tXvs �X�y� �9� � u � �w��NxG|z ���y�K¥ w } �q�2� � �q� u1% � v#t�vs@°,w �����À� u©|z �]� v �������N� ¯9*7 p -1- " 713�� ����(*= � � >

9*7 p �NsqvI� �q��� u¾v � | � vI�X� � �w��Nx �y� |$s{� � w��$| } s{��| � w��Xw��Nx � t � wyvªs � �$|$vIw��Nx{��¯©|z � ì�vI�$| �y�K¥>� � � w��^|z � w��Nt � |�$|$vIw��Nx � � � |z � v � � � w�� �N� vTs � |z � w��Nt � |�± £ z �G�y�K¥ w } �q� v ���y� � � v � |zNs{� � s �¬�T� � �q����� tXvsqxqv � �9� � w�� } ����� w���x} s{�9� � �4|� � ¨�z�w } z 9*7 p � � w�tX� �1�q� s{�NxÀ¨�wy|z§¨�z�w�| � �$t � } � ±   � |z � w���t � |��|$vIw��NxÀw�� � �ªt�| uUsqv } s{�4| � w����cs{� � u¨�z�w�| � �$t � } �c� � � } s{�`� � ��|� ��9,7 p v � | � vI�X�[wI~*� � y � � �2} ñ w � |z � w��Nt � |!w��*�Nsq| � �ªt�|Éu�w��`|zXw��!� � ��� �q�>�X� | �q� �$s� s � �#�Nsq| �1� x{w��À¨�wy|z � ° �q� w �í�y�K¥>� � �]� � | � v � �4u �y���q� w��NxG¨�z�wy| � �t � } �P� � � } s{�9� � ��|� � 9,7 p v � | � vI���xw } ±�T�w��Nxª|z �P�y�K¥ w } �q��� � �q� u1% � v � s � v#|$v ��� t � vI� � v��Ns\¨ � s4s � � � w �q� |zXw���¯=)713���4 �1=�717 -1- ~ " 7�3 � 3 � � s " 7�3 � � ~ �1=)7*7 3 �=)713���4 �1=�717r4 � wI~ �1=)3 �`� ' 9t= y p�� � ~�� 2 � y ( � 21q 9,7 p 4 y

~ 9 y � � 21q =�7�3���4'�*=)717 ( y~�� � � y � � 21q 9,7 p � y~ = y � � 21q =�7�3���4'�*=)717�� y~�� s � yxp�� 21q 9,7 p � }

u1uwI~ ( 713 * p;y ( � � ~ p�y ( � 21q =�7�3���4 4 }

ò � � � uP��s\¨Ë¨�w��zc|$s � � ��=)7�3 ��4 �1=)7*7�� � �\4�'8< � 4 �1=�717 |$s �N� } ��� v � ~1" 713��r3 � � s �1=�717 3�� �]w��X�$| � � } �s � " 7�3 �b� � � ~ �I'8< � 3 � � s �*=)717 3¤� �½w����$| � � } � s � �2'�< ��± £ z�w��]¨*s �����Ë�q��� s@¨ � ��|$s � � � |z � x � � � vIw }s\° � v � s �q�N�����7� � } |wys{��� � vs{� |z �!� v �������N� |$sTt � vI� �¬� � �]� w��$t ��� u�|$v ��� ��±/Æ&sqv � s@° � v � ¨ � ¨*s �����P�q� |$s{� � |w } �q��� u|z � � �1��� �X�y� |$s�t � vI� ��� � �L� w��t ��� uí� � �4uísq|z � vc|Éu,t � � } s{�4| � w���w��Nx`|$v ��� � � � } s{�ªt1s{� � �4|� ��� sqv �K¥>� �9t �y�q�w �*=)7*7 ��� ()7*>17,= } ± � �`wy|ª| � vI���ªs � | �=)713���4 �1=�717¾� � � 4�'�< � 4'�*=)717¾� v � s ���q� �9s{�$|9|z � vIwyx{z4|ª|Éu,t � �`|$s�1� �I'8< � � � � " 7�3 � � � |z�s � � £ z � 4�'�< � 4'**=)7 � � � � =�7�3 ��4'**=)7 �í� � |zNs � � � v � t � v � � � | � vIw&% ��� ° � vI�Iwys{���s � 4�'�< � 4U� � � =�7�3���4 ± £ z �í�K¥ |$v � t � v � � � | � v©w�� � t�v � } ����� � } �L�y� ° ���Ö�S� � ��� |$sét�vsqt � v � u¾t � v � ��|z � �w&% ��K¥ t�v � ��w�s{��� } s{�4| � w���w���x©w���ì ¥ } s{�X�$|$v � } |$sqvI��±T�Nsqv�| u4t � �c� � } z � � �1=�717N� |z � t�v � } ���N� � } � } � � �1� w�x{�Nsqv ��� ±£ z � �I'�< � � � � " 713�� w��X�$| � � } � � � sqv �1=�7179� v � ¯� � 42(83 �`� 7 �I'8< � 3 � s �2'�< �j~ �1=�717 3 � � '87,=)74�'�< � 4 *1=)7 � � p � 4�'8< � 4 �1=�717 p

� � 42(83 �`� 7 " 713�� 3 � s " 7�3 � ~ �1=�717 3 � � '87,=)7=)7�3 ��4 *1=)7 � � 4 � =)713���4 �1=�717r4

Page 41: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ��� � � ]���&���V! �L� ��� � �����  �

�T� | � vI� � |wy° ��� u � |z � �I'8< �©w��X�$| � � } � } s �����&�����N� ì� ��� w��À| � vI�`��s � 4�'�< � �*=)717 ¯� � 42(83 �`� 7 �I'8< � 3 � s �2'�< �j~ �1=�717 3 � � '87,=)74�'�< � ( � 4�'�< � �1=�717 (

£ z�w�� � zNs\¨ � ° � v � ¨�w ���>�1�#�y� �I� � J } w � �4|/|z � �ª|z � �2'�< � � ° � vI�wys{��± '�sq| � |z � |!|z � �I'8< � } ��� �� �N� ì� � � �N���e�q��� |� � |zNs � � � sqv � sq|z 4�'�< � 4'**=)7 � � � ��4�'�< � ���q��� s@¨�w��NxT|z �#� � � vg|$s ��� ìX� �S� wy|z � vgs{� � s � |z � � � w�� � �ªw��X�$| � � } ��N� } ��� v � |wys{�2±/È>w�� } � |z � � �S�N���7�q�X� |� � v � � � | ���q��� u�v � } � vI�Iwy° �q�q� ��w����$| � � } �*�N� } ��� v � |wys{��|z � | �N� ì� � ��� � wy|z � vs � |z � � �9�e� � } |w�s{����¨�w ����� s4sqt¾¨�z � � } �q���y��� ±©¼T|z � v } ��� �� � �]� � } z � � � �[�q� �$s&z � ° � |z � � �[� w��4| � v � s } � w��Nx�N���e�q��� |� ¡ ±

ò � v ���=� v�|z � w��4| � v � �$| ��� v ���q�N� v#|$s @ Þ � sqv �N� | � w � ��s � |z � " 7�3��`� � ���I'�< � } ��� �� � ��±ò � } � �Ë| � �$|G|z � " 713��b� � � �2'�< �éw����$| � � } � � � u � t�t � u,w���xt~ =)7�3 � : 4�'8< � � ¢ ¨�z�w } z^�z�s �����¾�1� |z �

w �N� �4|wy| uN¦!|$s`�s{� � |$v ��� � � ¨�z � v � =)713�� w�� � �$t � } w �q� w?% � |wys{�©s ��=)7�3 ��4 ¯=)713�� -1- ~ " 7�3 � 3 � � s ��(1= � � > q1s 3

£ z�w�� �e� � } |wys{� �e� w � ��w � |z � v � w�����sq| �b� ��w�ê �N� t � vC� � sqv9w � |z � w��Nt � | } s{�4| � w���� � �4u4|z�w��Nxb�ªsqv � |z � � �v � t�v � � � ��| � |w�s{�ís � s{� � ° �q���N� s � |Éu,t �R3L¢e� � � t�s{�I�w �X� u � } s{�9� � �4|� � � � ¨�z�wy| � �t � } � ¦C±

�+0�� �EG�<.A �7G�� �'�BI � �VC�GLI

¿ � } �q��� |z � � 6 w����$| � � } �/� sqv�|$v ��� ��¨ � tXv � � � �4| ��� w���È � } |wys{�Z# ñ � � } z ���N� } ��� v � |w�s{�]w����Iw��ªt �y�A� � � �c� sqvIw��Nx �|$s]tXvs �X� } � ¯�¨ � v � ê � w�v � |z � |!|z �����y� � � ��|!|Éu,t � w��9|z ���y��� ° � � �1��� � � ê �X�q� wy|Éuª| u4t �qñ |z � � � |ɨ*s ����� ° � � � v �� ê ���q� wGH[|z � u } s{�4| � w�� � ê ���q�j���y� � � �4|� �l� � � | ¨!s � v � � } z � � � v �G� ê �X�q� wGH[|z � w�v �y��� | � � � vIw�x{z�|P� ��� |$v ��� �� v �P� ê ���q�Ö� v � �$t � } |wy° ��� uq± � ��uÀsq|z � v#| ¨!s�|$v ��� � � v �]� � � ê ���q� ¯� � 42(83 �`� 7 ~ � 6 3 � � s � 6 ~ �1=)7*7 3 � � '87,=)7~ ( 713 * p�� � � ~ ( 7�3 * � � � p �.� �~ �1=)3 ��� ' 9N= � � � ~ �*=83 ��� 'r9 m = m � � 9 �.� 9 m � � = �.� = m� � � � � � 319)4�7

�NsqvI| � � � | ��� u � ¨ �T� s{� Ì |!� ����� |$s�xqs�|zNvs � x{z9|z�w��¬| ��� w � � � ° � vu9|w�� � ¨ � � ������� ê �X�q� wy|Éuªsqt � v � |$sqvC� � sqv� � � ¨�|Éu,t �qñ |z � � 6 w����$| � � } � } � � �1� Ò�ãKÐBÕ f ãÒªÙ ÓNÏdÑ Ý9ÙqÏeÕÖÔIÙqÚ=Ú á � vs{�ð|z � ��3�()3P�N� } ��� v � |w�s{�`w � ¨ � �s]�$t � } w � u¯

�)3�(83 �1=)7*7 3 � ( 713 * 3(�&�*=83 ��� ' ~ �1=�717 3 � ~ �1=�717 3 � ��7�= � � � � > � 6£ z � ��7,= � � � � > } ���q� � � w��ªt � w } wy| � uªt�vs ��� } � � � � � 6 w����$| � � } �]�N� } ��� v � |w�s{� ®$� �$| � w �q� |z � s{� � w��LÈ � } |w�s{� #,±  ���$| � � } � �Ts � , = �X� � � � ��� � p � " 713����1� � ���2'�< � } � � �q� �s �1� x � � � v � | ���¤� uí|z � ��7�= � � � � > } ���q� � � ±�ÁèÆLsqv �|z � �¤s{� � } ��� ���� � � � } � � �1� �$t � } wyì ���2� w��§¨�zXw } z } � � � |z �G� w��$|cs � � � � � ��� � �| ��� t � v � ��|z � �Iw&% ���b� � �|z � � � � � �#� � t � v � | ���&� u } s{�9� � ��± Ã

£ z �P�N� vIwy° ��� , = � w����| � � } ��� sqv �*=)7*7 w��#� � wyx{z�| � u`�ªsqv � } s{�9t � w } � | ��� |z � �í|z � � 6 w��X�$| � � } � ¯� � 42(83 �`� 7 ~ , = �r3 � � s , = � ~ �1=)7*7 3 � � '�7�=)7~ ( 713 * � � 2 � ~ �*=83 ��� ' � � � �1=��87~ ( 713 * p�� 2 � ~ ( 7�3 * � � � p42 � �~ �1=)3 ��� ' � � 2 � ~ ( 7�3 * � � � � 319)4�7~ �1=)3 ��� ' 9N= � 2 � ~ �*=83 ��� 'r9 m = m � � 9 �.� 9 m � � = 2 � = m � ��9 2 � 9 m

£ z�w����$t � } wyì � � � ÚyãCdqÕÖÔIÑÜ{ÐÅÙABLK�ÕÖÔPsqv ��� v�¯cr*s{�X�$|$v � } |$sqvI� � v � sqv �N� v ���U� u&|z � sqv ��� vTs � |z � wyv � t�t ��� v � � } � w��

Page 42: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

Â�ç � � ���R�. � �������

|z � ��3�(83`��� } ��� v � |wys{� �2� � � |z �G� vx � � � �4|�Ts �¬� } s{���$|$v � } |$sqv � v � } s{�ªt � v ���U� vs{� �y��� |�|$sÀvIwyx{z4|�±�¿ � } �q���|z � |T|z ���X� w � |ÅÄÉw�� � w��$|�|Éu,t � w��T� � � � �4|w } �q��� u � ê � wy° �q�y� �4|�|$s � �§sqv � w�� � vuÀ|ɨ*s Ä } s{���$|$v � } |$sqv]|Éu,t � ±   � �e� } | �|z�w���w���|z ���e�����1�N� } ��� v � |w�s{�2¯

�)3�(83 w 3 } � w } �x3j- w 3 } ��7�= � � � � > ~ � 6 y , = � � q*q + 4�7 � �1< q � < �17¢ Çlw��$|� �q� �$sPz � ° � �I'8< � � � � " 7�3 � w����$| � � } � � � ¨�z�w } z � v � �Nsq| �N� vIw�° ��� ± ¦ £ z ���N� vIwy° ��� � 6 � � � , = � w����| � � } � �� sqv � w��|� � v � |z ��� � ���q� s{� � � ñ w��bt � v|w } �X��� v � } z � v � } | � vª�$|$vIw��Nx{� �j� � � w��$|��s � } z � v � } | � vI� �/� v � sqv �N� v ���[� ��N� | � vI�`w�� ���¾� u¾|z �À� � ��� v � u>w��Nx ��'�3�= |Éu,t �q� ¨�wy|z � �^w���w�|w �q� � �N� �$|$vIw��Nx } s{�ªt � vIw���x �y� ���|z � � �U� s{�Nx � v�$|$vIw��Nx ñN� sqv �K¥>� �ªt �y�q� �6� 3�( � 2 �2� 3�(83*9*<,> ��±

  �Pt�v � } |w } �q� � 6 � � � , = � w����$| � � } � � � v �*�q� �ªs{�$| �q� ¨ � u,� �N� vIw�° ���2� v � |z � v�|z � � � � � vÄ �N� ìX� ��� ±   � �7� } | � ¨ ��zNs �X��� tXvs\°>w �N� s � v�s\¨�� �N� ìX��wy|w�s{���/s ��� ê ���q� wy|Éu � � � sqv �N� vIw���x�t�v ��� w } � | � �Ss{� � u`¨�wy|zÀ�$s{� � |$v � tXw ��� |wys{� ��1� w��Nx } � v ���7�X� |$s�� � w��4| � w���|z �*�K¥ t � } | ���G�q� x ��� v � w } t�vIsqt � vI|w � ��s �� ê � w�° �q�y� � } � v ����� |w�s{��� � � � |$sq| �q� sqv ��� vI��±� �íw���|$v � ���wy|wy° � ~�� � � t�v ��� w } � | �q�N� sqv �K¥N� �ªt �y�q� } s �������1��� w�� � �$|$vs � � � } s{� �e� �w���x�v ���q��� vI�Ss � |z � t�vIsqxqv � �� � � } s{� � s � � � w���x9� � � �X�q� sqv �q� |$s{� � |w } t�vIsqxqv � � |$v � ��� � sqvI� � |wys{����|z � |Tv ��� uís{�U|z � ~]� � � t�v ��� w } � | �qÌ ��1� w��Nx � � � t�t�vs ¥ w�� � |wys{�©|$s �N� ìX��wy|w�s{� �q��� ê ���q� wy| uq±�' � ° � vI|z ���y� �� � w�|Sw��*�s{� � |w�� � ��� � } � �I� � vu`|$sªtXvs\°>w �N�� 6 sqv , = � w����$| � � } � � � wGH � v � �4| � vs{� |zNs{� � |z � |À¨!s �������1�b�N� vIw�° ���2ñ t�vs �X� �� u½|z � �ªs{�$|&w��9t�sqvI| � ��|�K¥N� �ªt �y� w��!|z � |!s ��� � � � �$|$v � } | ��� | � |Éu,t � w���¨�z�w } z � wGH � v � ��| } s{� } v � | � ° �q���N� �S� � u`v � t�v � � � �4|*|z � � � � �� � �$|$v � } |#° �q���N� ±

� � � � � � � v � | ��� | u4t � } � �¤z � ° �����N� vIwy° ��� � � � � w����| � � } �q�� � � z � v ��� x � w�� � |z � sqv �N� vCw��Nx`w��#|z � |�s �|z � } s{�X�$|$v � } |$sqvI��w��À|z � �)3�(83ª��� } ��� v � |wys{�2±/��sqv �K¥N� �ªt �y� ¯

�)3�(83 � 3 � � � � � �)3 �$� � < � �)3 �$�&���87�4 �)3 �(� �87 � � 784 �)3 ��&�,' �)=�4 �)3 �$� � = � �)3 �$� �13�(��)= �)3 � ��7,= � � � � > ~ � � � � �

��� v �]� v � �s{� � �w��ªt �y�c�K¥>� �ªt �y� � � �w��NxG|z �P�N� vIwy° ��� w����$| � � } � � � sqv�|zXw��S|Éu,t � ¯

w �87 � � 784 �)3 � :*: � = � �)3 � } % w �87�� � 7�4 ��3 � y �,' �)=�4 �)3 � y � = � �)3 � }w � < � �)3 � y �)7 � � 7�4 �)3 � :1: } % w � < � ��3 � y �87 � � 784 �)3 � y � = � �)3 � }

Þ � vIwy° ��� " 7�3 � ¢!�2'�< ��¦©w����$| � � } � � � v � t1s{��w �X���L� sqv �q��� |Éu,t � �À¨�zNs{� � } s{�ªt1s{� � �4|í|Éu,t � � �q� �$s~z � ° �" 713��×¢!�I'�< �X¦ªw��X�$| � � } � ��± ¢ " 713��[� � � �I'8< �~w����$| � � } � � � sqv©�ªs{�$|�s � |z � �$| � � ��� v � | u4t � � � v � t�vIs\°>w �N���� u½|z �U� v �������N� ± È,s{� � |Éu,t � � � � � } z � ��|z �L�e� � } |w�s{�~|Éu,t � ~ q*s�� � z � ° �¤���I'8< �~w����$| � � } �L�X� |`�Nsq| �} sqvv � �t�s{� � w��Nx " 7�3 � ± ¦ £ z � | �K¥ | ���q� v � tXv � � � �4| � |wys{� �N� ìX� ���U� u ���N� vCwy° ��� �2'�< �Lw����$| � � } � w�� } s{���w��$| � �4|¨�wy|z¾|z �`� t�t ��� v � � } � s � } s{���$| � �4| �T� � �q�����/�K¥ t�v � �I�wys{����s � |z � |Éu,t � w��¾ê �N� �$|wys{��±��Nsqv �K¥>� �9t �y�q� w � ¨ ��q�����I'�< � � � � " 713�� |$s9|z � �17,= � � � � > } ���q� � ��� sqv�|Éu,t � � 3 �X��� � s\° �q� ¨ � s � | � w��

4�'�< � w � < � �)3 � :1: �)7 � � 7�4 �)3 � } % � w � < � ��3 � y ���87�4 ��3 � y �87�� � 7�4 ��3 � } �

� ���©·�¹�µ � ·�´RM�¸ S

Æ � ��u`� � ¨ } s{� � vC�!|$s �T� � �q�����1� v � t � %�% �y���`� uª|z � } s{� } � t�|*s � Ý9Ñ ÎÙ�ÒMâC±SÆ&s{� �q� � � v �T� v � ê ��� ��| � u � � } s � �>Ä| � v ��� w�� ��� � �q����� ¯9|z �   ¼ �$u>�$| � � w�� } s{���$|$v � } | ���½� �w��Nx � �9s{� �q�2�g� �$t � } w �q� �$u>�4| �M¥[� sqvG�9s{� �q� ��z � ��1��� �§t�vs\°>w �N���^¢ ��<À�K¥ tXv � ��wys{�X�C¦ ��� � � |z � �| � � ��� v �§� w � v � vIw � � } s{�4| � w�� � � � �4|wyv � �ªs �X���y������� w } � | ��� |$s�ªs{� �q� ��±   �&|z�w���� � } |wys{�L¨ ���K¥ t � sqv � �ªs{� �q� w } tXvsqxqv � �9�9w��Nxªw��í�ªsqv �]��� | � w � ±

Page 43: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�>��� � �'��� �.�9���+�� ��� ��� Â�ë

£ zXw��c� � } |wys{�¾w��ct � vIz � tX� �y� �� � x � �4| �y��¡ |z � �b|z � sq|z � vI��± ��� v � ¨ �9�q�X� v � ����Nsq|�s{� � uL|z �9��� �Nx ��� x ��7��� | � v � �P|z � |�w��4°qs � ° � �ªs{� �q� � �X� | �q� �$s&|$vIu§|$sLv � ° ���q� |z �9� wyxqx � v�tXw } | � v � ¯]¨�z�ub�ªs{� �q� � � v � � � } z � �w��ªt1sqv| � �4|¬|$s,s �2� � � zNs\¨ |z � u � v �c� � ��� ± £ z � v � w��*�Nsª�w���x �y� ¨ � u©s ���K¥ t ��� w���w���x]�ªs{� �q� �!|z � |S¨*sqv � � � sqv� ° � vuqs{� �qñ �ªsqv ���K¥ t ��� � � |wys{��� } � � ����� s � � �ª� | '�384�587�9*9�: <,=�> ± � �Nsq|z � v¬xqs4s � w��4|$vs ��� } |wys{��|$sPt�v � } |w } �q�t�vsqxqv � �9�9w��Nx � �Iw��Nxª�ªs{� �q� ��w��Sò �q���y� v Ì � �¾Ñ Î�Ù{ÒMâ;D�Ñ Ð Ø Ó,Î�Ô�ÏeÕÖÑ ÎÙ Ú2ÛSÐ$ÑÜqÐ$Ù ÝGÝGÕ=Î4ÜíÁ � �qÃd±

�+021 � 4 � �BA2C � 6 I I�GLI

£ z �/� v ��������� } s{�4| � w���� � � � � �1� v2s � } ��� �� � � �N� ìX��w��Nx��ªs{� �q� � � v � |z � u � v �¬� � ��� w�� ��� � �q����� ± £ z � � � } ��� �I� � �� v ���X� � ��� s{�é|z � �ªs{� �q� } s{���$|$v � } |Gw�� } � | � xqsqvIué|z � sqvu ñ ¨�zXw � �$|�|z � } � | � xqsqvué|z � sqv � |w } | � vI�9w��Ns � sqxqut�vs@°,w �N� �j|z � � � � � � � sqv/|z � �ªs{� �q� w }S} ��� �I� � � � � � sqt � v � |wys{�X� � wy|gw��g�Nsq|/� � } � �� � vuG|$s �N��� ° � w���|$s � � �|$v � } |� � |z � � � |w } �#|$s9x � | � �Lw��4| � wy|wy° ��� � �N� vI�$| � � � w��Nx�s � zNs@¨ |$s � � � |z � �ªs{� �q� w }�} ��� �� � ��±

� �ªs{� �q� w�� } s{���$|$v � } | ��� s{�U|$sqtUs �/� t�s � u,�ªsqvItXz�w } |Éu,t � � � } z � �Z�>,>± £ z � �ªs{� �q� wy|� ���y� w�� ��� ìX� ���� u`w����$| � � } ���N� } ��� v � |wys{��� � ��$s } w � |w��Nx�|z � |Éu,t � ¨�wy|z�|z � �$s{� � sqv �q��� s � |z � �9s{� �q� w }�} ��� �� � � � � � �`� (�<,=��� < � 3 �X��� � � � < � 3���*89 �`4 ±�'�s{� � s � |z � �ªs{� �q� w }ª} ��� �� � � � v ���N� vIwy° � �X�y� ±   � �q��� wy|w�s{�U|$sg� , � | ¨!sUsq|z � v|Éu,t � �#w��À|z ��� v �����X�N��� v � � � � �1� vI�Ss � |z � �ªs{� �q� w }�} ��� �� � ��¯ � w��$|� ¢ w } ¦ � � � � 3 � � 7 ±

Æ � |z � � � |w } �q��� u � �ªs{� �q� � � v � xqs\° � vI� ���]� u�� � |ls � ÚyÙ � â2|z � |l�zNs �X��� zNs ����� sqv�|z � �ªs{� �q� w } sqt � v � |w�s{����±£ z�w��*w �N��� s ����� ¨���w����Nsq| � �Xw�ê ��� |$s9�ªs{� �q� ��¯ ��� � �q����� w�� } �����N� �!sq|z � v�sqt � v � |wys{���S|z � | � v � xqs\° � vI� �����X� |�y��� �$|Pw�� � sqvC� �q��� u �1� u ��� ¨���±G�Nsqv �K¥N� �ªt ���q� p / � �¤� � � � <�( ~ p � � � � s � x{z4|�|$s �1� |z � � � � �ª� sqv � ��u|Éu,t � s � ° �q���N� � �1� w��Nx } s{�ªt � v ��� ± � s@¨ � ° � v � |z � v � w��/�Ns]x ��� v � �4| ��� s � |z�w���¯ � sq|z �.� � � �[/ � � v � � � t � v � | �� � |zNs � �!w��ª|z � � 6 } ��� �� � � � |z � v � w��/�Ns]¨ � uª|$s � �� � v � |z � |@�.� � � � � /�� v � v ����� | ��� w��ª|z�w��!� � ��� � v\±   �|z � � � � � � � ��� �q� |z � �9s{� �q� w } ��� ¨��!tXv � � � �4| ��� z � v �T� v � ��sq| � � � sqv } ���©� u �T� � �q�����Ö�>�X� |*s � x{z4| ��� s �1� u ���� u � �4uíw����$| � � } � �Ss �g� �ªs{� �q� w }�} ��� ���± £ z � �ªs{� �q�í��� ¨���x{w�° � w����w�x{z�|�w��4|$sª|z �P� � ��� v � u>w��Nx��|$v � } | � v � s ��ªs{� �q� ��¯ � u �K¥N� �9w���w���x�|z � � �]��� ¨�� � ¨ � zNsqt � |$s9x{wy° �]�9�=�����2� sqv�zNs@¨ �ªs{� �q� � � v �]� � ��� ±

£ z � � � �`� (�<,= } ��� �� �2�q� v ���q� u � w�� } � �� ��� w��¤� � } |wys{� # ���N� ì� � � � �Iw��Nx �y� sqt � v � |wys{�2¯ * �`32+ ± £ z � � � t�e� � } |wys{� � t�t � w � � � �ísqt � v � |wys{�À|$s9|z � s �>®$� } |�#w����w �N�T� } s{��| � w�� � v ¢ t1s � u,�9sqvtXz�w } |Éu,t � � } � � �1� |zNs � x{z4|s �!� � } s{�4| � w�� � vI� � sqvc° �q���N� �Ts �!� �Nsq|z � vc| u4t � ¦ � v � | � vC��w��Nx � } s{�4| � w�� � v�s � |z � � � � � �z � t � ± £ z � � �G��� ¨��� t�t � u`|$s * ��3I+ w��À|z � } ��� �� � � ��� ()<�= ¯

* �`32+ � � � � �* �`32+ ~]* :x> � � * �`32+ * : * ��3I+ >

£ z � � �À��� ¨�� � ��� � v � |z � |ª|z � } s{��| � w�� � v9�z � t � w�� � � } z � �Nx ���Ë� u"* �`32+^� � � |z � |ª|z � } s{��| � �4|�9s � |z �} s{�4| � w�� � v � v � �Nsq|#v � Ä � vv � �Nx ���&� u�|z � � � t�tXw��Nx�sqt � v � |w�s{�2±

£ z � � < � 3�� } ��� �� �N� ìX� � ��|ɨ*s �X� �w } sqt � v � |$sqvI��¯ s1s � ¢7� w�� � ¦ � � ��=�7,(���= �±� �-* � p 9 v s*s�y s*s �� 9*38414 � < � 3 � � � '87,=�7~ s1s � � -*- � 3 q1s ~ 3 q*s � � �Nq1s � �~ s1s8� -*- � 3 q1s � � q1s � �=)7,(!�)= � -*- 3 q1s � 3* 3 � 9 -*-���(1= � � > q1s � 3� s1s 5 � � s1s � o � q1s 5

£ z ��� w�� � sqt � v � |wys{��� � s1s � � � s1s � � } s{� � w�� � |ɨ*s��9s{� �q� w } ° �q���N� ��¨�z�w �y� |z ��=)7�(��)= �Àsqt � v � |wys{�íw�� ®$� } |�

Page 44: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

Âq � � ���R�. � �������

� ° �q���N� w��4|$sí|z � �ªs{� �q�~¢ } s{�4| � w�� � vB¦C± £ z � �wyx{� � | � v � s � s1s �Uz ��� tX� � �c|$s � � �N� vI�$| � � � |zXw��Tsqt � v � |wys{�2¯�`3 s*s � o � q1s � � } s{� � w�� � � � �ªs{� �q� w } ° �q���N� �`3 } s{��| � w���w��Nx9° �q���N� ��s � |Éu,t � 3�� � �§�9�e� � } |w�s{�&¨�z�w } zsqt � v � | � ��s{� � ° �q���N� � s � | u4t � 3N� v � | � vI��w��Nxª|z � �ªs{� �q� w } ° �q���N� � �2± £ z � v � � �X� |#w��#|$s } s{� � w�� � �`3�� � �� �bw��4|$s � �ªs{� �q� w } ° �q���N� } s{��| � w���w��Nx[�2± £ z � s1s �e� � } |w�s{�bw�� � � ��� ¨�z � �¤|z �9�e� � } |wys{� � s � �P��sq|P� �����|z � ° �q���N� t�vIs ��� } ���À� u©|z � ì�vC�$|#�ªs{� �q� w } sqt � v � |$sqv\±

£ z � tXv � } w�� � � ��� �Xw��Nx¤s ��� w�� � w���x �N� t � � � � � s � } s � vC� �q� s{�½|z � �ªs{� �q� ±^�Nsqv �K¥N� �ªt ���q� w��Ë|z �   ¼�ªs{� �q��� prs1s � � t � v � sqvI�9��|ɨ*s � } |wys{���c� � ê �N� ��|w �q��� u � t � ��w��Nx`|z � v � � ��� |#s � |z � ìXvI�$|�w��4|$s©|z � � � } s{� � ±�Nsqv�|z � sq|z � v �X� w � |ÅÄÉw��c�ªs{� �q� � �@� w��|� � � � |z � � 3 � � 7 |Éu,t �q� |z � � � �ªs{� �q� w } sqt � v � |wys{��� } � � �1�¬� � ��� vI�$|$s,s �w��í| � vC�9��s � t � ��w��Nx % � vIs�sqvc�ªsqv � ° �q����� � � vs{� s{� � } �q� } ����� |w�s{�&|$s`|z � � �K¥ |�±�ò � ¨�w ��� � �����K¥>� �ªt �y� ��s �|z�w����IzNsqv| � uq±

£ z ����< �$u>�4| �M¥ t�vs@°,w �N� � � �Iw��ªt �y� �zNsqv|z � � �Ë� sqv } z � w�����s � �9s{� �q� w } sqt � v � |wys{����± £ z �©� �� � �4|w �q�|$v � ��� ��� |wys{�Às � �1< w�� } � t�| � v ��� w��À|z �]� s ��� s\¨�w���x�| ¨!s`v ���y� ��¯

��< 7 v � 7 { � 7 vns*s 7 {��< + 21q 7 v � 7 { � 7 vns*s � o + q1s 7 {

ò z � �×|z � t � |$| � vI� w���|zXw���� � } s{� �×� sqvI� s � ��< w��©v ���e� | � �X�y�q� t � |$| � vI� � � | } z �e� w ��� v � } �q��� ��|z � * 3 � 9sqt � v � |wys{�2± £ z�w��S� � u©v � w�� �c� � � vIvsqv ¢e� �#w��À|z � �>,ª�ªs{� �q� ¦!sqv�v � | � vI� �b� % � vs ¡§¢e� �#w��©|z �P� w��$|*�9s{� �q� ¦C±£ z � �S|z � �9sqv � } s{�ªt �y�K¥ |$v � ��� ��� |wys{�&w��

�1< + 2*q 7 v � 7 { � 7 vns1s ��~ o � q*s � 384I7 �r< * + q1s 7 { � � q*s * 3 � 9 � 4 � �¨�z � v � � 4 �Lw�� � �$|$vIw���xéw �N� �4|w � u,w���x¾|z �¤� s } � |w�s{��s � |z � ��< �$| � | � � � �4| � sqvÀt1s{��w �X�y�&� � � w�� � � � vIvsqv� � �� � x � ±#�Nsqv �K¥>� �ªt �y�q� w��&|z �   « ¼ð�ªs{� �q�2�� � � } |wys{�U� � } z � ��m 3 m 21q >�7�()�I'�3�= ¨�w ��� } �q��� * 3 � 9 w � |z �} z � v � } | � vS|Éu,t ��� w��¬��sq| Ì �>Ì ± £ z�w�� � w��ª| � vI� � | � vC�9w�� � | � �¬|z � t�vIsqxqv � � �Iw�� } � w��9|z �   « ¼ �ªs{� �q� * 3 � 9 } �q��� �7,=*=)<�= ±

£ z �P��� ¨��#¨�z�w } zÀxqs\° � vI� s*s � � � ��=�7,(���= � � v � ¯=)7�(���= � 3 s*s � 5 � 5 3� s1s � =)7�(��)= � � �p 4 s*s � =�7,(���= � : * � * �`3I+ * p 4� s1s ��~ o�prq1s 5 prs1s � ' � � ~ � s1s � 5 �Ns1s � '

£ z � } ��� �� � < � 3���*89'� 4 w�� � � ���í� sqv��ªs{� �q� �#|z � |�z � ° ��� �\ã�ÐÅÑ ���y� � � �4| � � �L� BÚ Ó4âPsqt � v � |w�s{�2¯� 9*38414 ~ � < � 3�� � � � s � < � 3���*89'� 4�� � '87,=)7

� � 7�=)< -1- � 3�)+�9'� 4 -1- � 3 q1s � 3 q*s � 3

£ z � % � vIs ���y� � � �4|#s �1� u,�#|z ��� s ��� s\¨�w��Nx ��� ¨���¯� s1s � o�prq1s � � 7,=�< � � � 7,=�<� � 7�=)< s*s � � � � � 7,=�<

�Nsqv � w��$|� � |z � % � vsU° �q����� w�� w } � |z �9� �ªt�| u � w��$|�± £ z �   « ¼ �ªs{� �q� z � �]�Nsx% � vs ���y� � � �4| � � � w��]�Nsq| �� � � �1� v#s � |zXw�� } ��� ���±

£ z �P��� ¨��#xqs\° � vI��w��Nx9|z � �)+�9 � 4 sqt � v � |$sqv � v �]� � � s ��� s\¨���¯� � ��+�9'� 4 � � � 7�=)< � �� � 7,=�< � ��+�9 �`4 � � � �

£ z � �)+�9'� 4 sqt � v � |$sqv�w���sqv � w�� � vu � w��$| } s{� } � | � � � |wys{�Uw��À|z �]� w��$|��ªs{� �q� ±

Page 45: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�>��� ��� �N������� � � �'��� �.� Â,#

�+0 / ���BA�6��'� A � � 4 � �BI

� wy° � �9|z � �ªs{� �q� w } sqt � v � |wys{��� � � � |z ����� ¨��g|z � |/xqs@° � vI��|z � � � ¨�z � | } � �ª¨ �#�X� w ��� "`ò � z � ° ���q� v ���q� u�K¥N� �9w�� ��� |z �   « ¼ �9s{� �q� w�� �N� | � w � �$s9¨ � �$| � v|#¨�wy|zÀ|z � | ¨!s�sq|z � v �X� w � |ÅÄÉw��À�ªs{� �q� ��±

�Nsqv � w��$|� � �9s{� �q� w } � w�� � w��Nx�w���°qs � ° � � ® s{w���w��Nx�|$sqx � |z � v � � � |�s � } �q� } ����� |wys{�X� � sqv ��� } z¾° �q���N� w��§|z �� w��|�±�ò z � � � � ��� ¨�wy|z � w��$|� � |z � �Iwyx{� � | � v � s � s1s � �1� } s{� � ��¯~ s*s � � -1- w 3 }rq1s ~ 3 q1s w � }�� q*s w � }

£ z � |�w�� � x{w�° � � �&� w��$|�s ��3NÌ � � � �¾�&�e� � } |w�s{�¤|z � |�� � t� � � 3 s{�4|$s �L� w��$|cs � � Ì � ��� w�� � w��Nx � t�t � w � �c|z�w���e� � } |wys{�b|$s ��� } zËs � |z ��3NÌ ��w��b|z � w��Nt � | � � � v � | � vC��� �q��� s � |z � x � � � v � | ��� � Ì � } s{� } � | � � � | ��� w��4|$s �� w��|�± £ z �V=)7�(���= � �e� � } |wys{� } v ��� | � � � �w��Nx ��� |$s{� � w��$|�± £ z � � � sqt � v � |w�s{���G�zNs �����[�q� v ���q� u �1�©�7� �`w � w � v�¯� w��| } s{�ªt�v � z � ���wys{�X� } � � ��� �w � u �1���K¥ t�v � �� ���§� �w��Nx�|z � �ªs{� �q� w } sqt � v � |wys{��� �N� ìX� ���U� sqv � w��$|��± £ z � � �� s ��� s\¨�w��NxG|zNv �����K¥ t�v � ��Iwys{��� � v �]�q���2� wGH � v � ��|#�u,�4| �M¥í� sqv#|z � � � � � |zXw��NxN¯wI~ p�y � � � p321q w vzyC{�yc|,} y � 21q w v yC{�yc|*};yxp / � � }��< p521q w vzyc{�yc|,}

� 21q w vzyc{�yc|,}�*=���7 2*q =)7�(��)= �j~ p / � � �=�7,(���= �j~ p�y � �

w v yC{�y0|*} s*s ��~ otprq1s w v yC{�y0|*} s1s ��~ o � q*s =)7,(!�)= � ~ p / � � �ns1s �~ o = q1s � 384I7t=r< * �1=!��7 q*s =)7,(!�)= � ~ p�y � �

� q*s * 3 � 9 � � �1�1�£ z�w�� �N� ìX�Xwy|wys{� ��� t � � � �/s{��|z �c�N� ìX��wy|w�s{�9s � * 3 � 9 w��`|z�w��*�ªs{� �q�©� �!|z ��� �ªtX|Éu � w��$|�±�h¬�� � �4|w �q��� u �4��� } z21q w��¬x � � � v � |w��Nx � � � |Ss � ° �q���N� �¬¨�z�w } z©w��!t � �� ��� s{�©w��4|$s�|z � v � � � w�� �N� v!s � |z � �ªs{� �q� w }T} s{�ªt � | � |wys{�2±£ z � � p521q w vzyc{�yc|,} w���°qs �q� ��|z � v � � � w�� ��� v*s � |z � �ªs{� �q� w }c} s{�ªt � | � |wys{�À|z�v ��� |w�� � � � s{� } ��� sqv ��� } z���y� � � �4|Ss � |z �c� w��$|�± £ z � v � | � vC� ���`�K¥ t�v � �I�wys{� � ~ p�y � � � ¨�w �����1��� ° �q����� | ���©� sqv �q��� t1s{��Iw �X�y� } s{� � w�� � |wys{���s �1� w�� � w��Nx{��|z � |!� � vvs � � � w�|�±   �ª|z�w��/� � ��� �q� |z ��� w��$|g�ªs{� �q� } � � �1� |zNs � x{z4|/s �2� � �N� � } vIw � w��Nx �7� � } |wys{���s � � �X� |w Äd° �q���N���À� vx � � � �4|��±¬��sqv �K¥N� �ªt �y�q� |z�w�� �7� � } |wys{�2¯

� � ( � * ( { -*- ~ 3 q1s � q*s � � q1s w 3 }rq*s w � }rq*s wc� }� � ( � * ( { * p � � ��< p m 2*q p

� m 21q �=�7,(!�)= � ~]* p m � m �

| � vI�X� � � sqv � w�� � vIu �7� � } |wys{� s � | ¨!s � vIx � � � �4|� ¢ *>¦©w���|$s �^�e� � } |wys{� s@° � vL� �X� |wyt �y� ° �q���N� � ¢e� w��$|�Às �� vx � � � ��|�C¦ � v � | � vC��w��Nx � ° �q���N�§� sqv ��� } z t�s{�I�w �X�y� } s{� � w�� � |wys{�×s � |z � |ɨ*s~w��Nt � | � vx � � � ��|��±­��sqv�K¥N� �ªt �y�q�

� � ( � * ( { ~ u�� w vzy0|*} w v ( yc{ ( yc| ( } % w v1v yC{�v yc|�vzy�v6|;yc{*|;y0|1|,}� � ( � * ( { ~ o 3 � q1s w 3 y � }�� � 3 � � �6� � � % w � 3 � � y � 3 � � y ����� � y ��� � � }� � ( � * ( { ~ � � w vzyc{�y"�1} w } % w }

£ z�w�� �7� � } |wys{�Lw�� � �t � } w �q� w&% ��� ° � vI�Iwys{�&s � |z � ( � * ( � { �7� � } |wys{�&w��L|z � �ªs{� �q�L� w � v � vuq±%�/s � } � �U|z�w�� �s � wy| � �í|$v � ���$t1sqv|w��Nx �^�e� � } |wys{� � vs{� s � |�Iw �N� |z �b� w��$|À�ªs{� �q��� * � w���|$s½|z �¾� w��$|À�ªs{� �q� w��ר�z�w } z} s{�ªt � | � |wys{����| � �q� s{�&� �X� |wyt �y� ° �q���N� ��±

£ z � �ªs{� �q�L��� ìX� ���À� sqv� 3 � � 7 w��#�w��9w ��� vS|$s9|z ��� w��$|��ªs{� �q� ¯/|z � ° �q���N� <,(�' � � > � � vI° � � � � w } � � �� �`42( p � � w p1} ±

Page 46: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

 � � � ���R�. � �������

�+0�� � I A ��� � 4 � �BI

h ¥ t ��� w���w��NxG|z � �ªs{� �q� w } sqt � v � |$sqvI� � � � |z � wyv � ��$s } w � | ���¤��� ¨�� � s � �� Ì |#v ���q��� uí�zNs\¨�¨�z � |��ªs{� �q� � � v �xqs,s �§� sqv�±cò×z � |T|z � uUv ���q��� uít�vIs\°>w �N� w��]Ý9Ñ�Ò Ó>ÚyÙ ÐBÕ7Ïeá ± £ z � |Tw�� �� u �N� ìX�Xw��Nx � �§sqt � v � |wys{�§�ªs{� �q� w } �q��� u �¨ � } � �¾z�w �N�G� � ��� v � u>w��Nx�� � } z�w�� � vuUw�� � ¨ � u§|z � | �q��� s\¨���� � ¨ �=��� | � v � ��|$s �1� w�� } sqvt1sqv � | ��� w��4|$sí|z ��ªs{� �q� |$v � �X�$t � v � �4| � uq±Pò �q����� v Ì �ct � t � v9Á � � Ã/w�� � � �K¥ } �����y� �4| �K¥>� �9t �y� s � zNs@¨­�ªs{� �q� � } � � �1�G� � ��� |$s} s{���$|$v � } |��ªs �X����� v*t�vsqxqv � �9��±gò � ¨�w ��� �| � v|�¨�wy|z � �ªs{� �q� | � �q� � � wyv � } | � u � vs{� |z�w��!t � t � v � |z � �$| � | ��ªs{� �q����� � � |z � � �� w ���©� �ªsqv � } s{�ªt �y�K¥ �ªs{� �q� ¨�wy|z � �w��`w ��� v �N� ìX��wy|w�s{�2±

Ê vIw �� u ��� �$| � | � �9s{� �q�í�X� w � | � vIs � � �í� �$| � | � |Éu,t � �9� s,s � � � w �q� |z�w���¯�)3�(83 � � 3 � � �j~ � q1s ~ 3 y � �1� q1q ��'�7 ��< � 3 � � � (���+�7� � 42(83 �`� 7 � < � 3�� � � � '87,=�7q1q ��7 * � � 7�4t42(83�()7n+�=)<I+�3,>�3�( � < �� � � vns*s � *8� { � � �j~ o 4 ( q1s 9*7�( ~ = y 4 v,� � � v 4 (

� � � { � *�� { = � �� { 4 v,�

=)7,(!�)= � 5 � � �j~ o 4 q*s ~ 5 y 4 �*�q*q 7 p (*=83 � (�4X(,'�7r42(83�()7 * =)< �r(,'�7 ��< � 3��=)713�� � � -1- � � �=)713�� � � � � �j~ o 4 q*s ~ 4 y 4 �*�q*q �1+ ��3�(�7�4 (�'�7 42()3�(�7 < * (�'�7 ��< � 3 ��1+ �)3�(�7 � � -1- ~ � q*s � � q*s � � ~ � q1q 319�()7�=�4 (�'�7 42()3�(�7�1+ �)3�(�7 � � * � � �j~ o 4 q*s ~1~ �zy * 4 �*�q1q =!� � 3 � < �)+ ��(83�( � < � � � (,'�7�� � ��< � 3��=�� � � � -1- � q1s � � 3 q1s ~ 3 y � �=�� � � � 4 ( ~ � � � � � � 4 (

£ z�w�� �K¥N� �ªt �y�ª�N� ì� � � � � � ¨ð|Éu,t �q� � � � |$s �1�ª� } s{�ªt � | � |w�s{�¤|z � |Pw��ªt � w } wy| � u } � vvIw � � � | u4t � � ± £ z � |w�� �2� } s{�ªt � | � |wys{�¤s � | u4t � � � (U�N� ìX� � � � ° �q���N� s � | u4t � ( ¨�z�w �y���q� �$síw��4| � v � } |w��NxÀ¨�wy|z ¢ v ���q� w��Nx � � �¨#vIw�|w��Nx4¦T|z � �$| � | � s � | u4t � � ± £ z �À�N� ìX�Xwy|wys{�bs � � �éw����w��9t �y� ¯ªwy| } s{�X�w��$|��s �#�e� � } |wys{�X�P|z � |G| � �q�&��$| � | ��� � � t�vs ��� } � | ¨!s9v � � ��� |��¯ � v � | � vI� ��� ° �q���N�`¢ s �g� �4u�| u4t � ¦ � � �&� � � t ��� | ��� �$| � | � ±!ò � } � � Ì | � � �� |Éu,t � �$u>�Ns{��u>� z � v � ¯g¨ � � �����L� |Éu,t � � � � �P� w �q� � ��|z � | } � � ����� � ��� w��íw����$| � � } �c��� } ��� v � |wys{����± £ z �� 7 � ( �,+�7ª�N� } ��� v � |w�s{�&w���s � | � � � � ��� z � v � w����| ���q� s � ��3�()3 ±

£ zXw���w����$| � � } �¤�N� } ��� v � |w�s{� �N� ìX� � ��|z � � t ��� � � w���x Ì s � |z � �ªs{� �q� ¯[zNs@¨ |$s½� � ê ��� � } � |ɨ*s } s{�GÄt � | � |w�s{��� � � � |z �©�N� ìX��wy|w�s{�bs �#� � � �9t�|Éu } s{�9t � | � |wys{�2±¤È � ê ��� � } w��Nx ¢ |z � s1s �¤sqt � v � |$sqvB¦ �N� ìX� � � �} s{�ªt � | � |wys{� ¢e��� �Nsq| ���L� uÀ|z � } s{�X�$|$v � } |$sqv � �X¦S|z � |�t � �� � � � �Uw���wy|w �q� �| � | �q��4 (N� w��4|$sx� v � |z � �&t � �I� � �|z � ° �q���N� } s{�9w��NxGs � |�s � |z�w�� } s{�ªt � | � |wys{� �)=�� |$sª|z �c�7� � } |wys{�©|z � |�v � | � vI�X�!|z � � � } s{� � } s{�ªt � | � |wys{� �� { ±¬�jw�� �q��� u � |z � �$| � | � } s{�`w��Nx9s � |�s � � v w��#t � �� ��� w���|$sl� { � � � |z � s\° � v �q��� v � � ��� |�w���|z � v � � ��� |Ss � � { ±

£ z �#�N� ìX��wy|w�s{��s �`=)7�(��)= ��w�� ��� �w � v�¯ =)7�(���= � � s � �� Ì | } z � �Nx � |z � �$| � | �T� | �q���Öñ w�|gs{� � uG� � v° � �/|$s � vIw��Nx� ° �q���N� w��4|$sª|z � �9s{� �q� ±

ò z�w �y� s1s � � � �Z=)7,(!�)= � � v � |z �S�X� �w } �ªs{� �q� w } � � ê �N� � } w��Nx�sqt � v � |w�s{��� � ¨ �#�q� �$sc� ����� �$s{� � Ý9Ñ ÎÙ{ÒqÕeÔBÐBÕ=ÝGÕeÏeÕ f ãBâB± � �ªs{� �q� w } t�vIw��`wy|wy° � w��!�w��ªt � u � ��sqt � v � |wys{��|z � | � � � �!|z � w��X�w �N� �gs � |z � �ªs{� �q��� � �|$v � } Ä|wys{� � � � | � tX�gw��4|$s�|z � � ¨�z ����� � � � � x ��� vC� Ì |z � |g� � �q� |z � �ªs{� �q� ¨!sqv � ±g�Nsqv �K¥N� �ªt �y�q� w���|z � � ,T�9s{� �q�2�

Page 47: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�>��� � ��� ��� � �'��� � �  ï

sqt � v � |$sqvI��� � } z � � + ��()�I'�3�=`� v � t�vCw��9wy|wy° � �w�� } � |z � u �N���q� ¨�wy|zÀ|z � w���� � vS¨*sqv � w��Nx{��s � |z � �>,9�9s{� �q� ±È>w��`w ��� v � u � s � v#�$| � | � �ªs{� �q�í� � � �S|ɨ*sªt�vIw��9wy|wy° � ��¯ =)713�� � � � � � �1+ �)3�(�7 � �±�'�sq| � |z � |�|z � � ���N� t � � � s{�|z � w���� � v*�$|$v � } | � v � s � |z � �ªs{� �q� Ä � } z � �Nx � |$s�|z �T�N� ì��wy|wys{�ªs � |z � � �ª|Éu,t � ¨*s ����� v � ê � wyv ��� } z � �Nx �|$s9|z � � � t�vIw��`wy|wy° � ��±

£ z ���N� ìX�Xwy|wys{�ís ��=)713�� � � � � � �*+ ��3�()7�� � � v � �w��ªt �y� ¯ =�7�3 � � � � vIw��Nx{��|z � �$| � | � s � |Ts � |z � �9s{� �q�� sqv�s � � � v° � |w�s{�é¨�zXw �y� �1+ �)3�()7 � � �q��� s@¨��]|z ��� � � v�|$s �q� | � v�|z � �$| � | � w��é|z � �ªs{� �q� ± ¢ ò � } s �����[�q� �$sz � ° ��� � ��� � = � ()7�� � � � � t�vIw��`wy|wy° �T�X� | � t ��� | � w���s � | � � � �9sqv � � � | � v �q� ¨ � uís ���N���q� w��NxG¨�wy|zí�$| � | � ¦C±

�jw�� �q��� u � ¨ � � �����&�ª�e� � } |wys{�À|z � |�v � ��� } s{�ªt � | � |wys{���#w��À|z � �ªs{� �q�2�)=�� � � �± £ zXw��S| � �q� � � �Uw���wy|w �q��$| � | �c� � �`� } s{�ªt � | � |wys{� � � � u>w ����� � � sq|z`|z � v � | � vI� ��� ° �q���N� s � |z � } s{�ªt � | � |wys{� � � � |z � ìX� �q� �| � | � ±

Çls4s � w��Nx � |G|z �À� wyxqx � vGtXw } | � v �q� ¨�z � |�¨ �í� v � |$vu>w��NxU|$s � s§w�� �N� ì� �©� �^s@° � v �q��� } s{�ªt � | � |wys{� � �� � � vIw � ��s � �$| � t� ¢7�e� � } |wys{���P¨�wy|zb| u4t � � � 3 ¦ � � � ê �N� � } ���[� �w���x s*s � � � � =)7�(���= ��± £ z � � � �$| � tX��� � uw��4| � v � } |]¨�wy|z¤|z � �$| � | �¤¢ °,w ��=�7�3�� � �Usqv �*+ ��3�()7�� �>¦Tsqv�� � ubwyx{�Nsqv � |z � �$| � | � ± � s\¨ � ° � v � |z �`� � �U¢ sqv�Ns{�>Ä � � � ¦ls � |z � �$| � | � w��gz�w ���N� ��¯2¨ �#� s{� Ì |jw���°qs �q� sqv/� � ê �N� � } � s � v } s{�ªt � | � |wys{�X� � wGH � v � ��| � u �N� t � � � w��Nxs{�í¨�z � |z � v#sqv��Nsq|�|z � u � � � � ±

¿ � |z � v9|z � �^t�v � � � ��| � �4u �K¥N� �ªt ��� � � �w��Nx§|z�w��G�w��ªt �y� �$| � | � �ªs{� �q��� ¨ � tXvs } ����� s{�^|$s � �ªsqv �} s{�ªt ���K¥`�K¥>� �9t �y� |z � |Sw�� } �����N� �/|z � �| � | � �9s{� �q� ±gò ���N� ìX� �T� �I� �q��� ãKÝ �IãIÒ{Ò�ãÒ`ÚyÙ Î4ÜqÓ�Ù�Ü,ã!s � v � �$s � v } � Ä� �w��Nx } �q� } ����� |wys{����± £ z � |Pw�� � ¨ �ª�� w ���U� �$t � } w �q� t � vt1s{� ����� �Nx ��� x � w��ªt �y� � � �4| ���b� � � � � |�s �S��� � �q�����|Éu,t � � � � �À�e� � } |wys{�X��±¬È � } z ��� �Nx ��� x � � � � � |z ���X� �w } |$s,s � ��s �j��� � �q�����Ö�N�e� � } |wys{��� � � � | u4t � � � |$s �X� w ���©�� w � v � vu9s � sqt � v � |wys{��� � � � |Éu,t � �#�$t � } wyì } �q��� u9| � w � sqv ��� |$s �9� s{� � w��Às � w���| � v � �|�±

  �&|z�w�� �K¥>� �9t �y�q� } s{�X�w �N� v � } s{�ªt � | � |wys{�&|z � |�v � ê � wyv � �#�s{� � �$sqvI|�s � v � �$s � v } � ±   � |z � v � �$s � v } � w��� ° � w ��� ��y�q� } s{�ªt � | � |w�s{�&t�vs } ����� � ñ ¨�z � �í|z � v � �s � v } � w�� � � � ° � w ��� ��y�q� |z � } s{�ªt � | � |wys{�&� � �t � � � ��±jò �� � � |z � | u4t � "U|$s �N� �Nsq| �9� } s{�ªt � | � |wys{� � �w��Nx�v � �$s � v } � � } s{�4|$vs ���y���§� uLs � vP�9s{� �q� ± £ z ���N� ì��wy|wys{�s � "Àw�� � � � s ��� s\¨���¯

�)3�(83 " 3 �#" ~ " 784�< �)= � 7 q*s ~ " 784�< �)= � 7 y � � (�'�7�=r3 ~ " 3 �*�1�h � } z } s{�ªt � | � |wys{�ªw�� �c�7� � } |wys{� � vIs{� � ° � w ��� �X�y� v � �s � v } � �j|$s�v � � � w���w��Nx�v � �$s � v } � � � } s � t �y��� ¨�w�|z � w�|z � v� v � � �X� | � s � |Éu,t ��3>� sqv � � � �$t � � �N��� } s{�ªt � | � |wys{� � s � | u4t � " 3>� } � t�| � vIw���x�|z � ¨*sqv �¤� s{� �ª� t¤|$sí|z �t1s{w��4|*¨�z � v � v � �$s � v } � �#¨ � v �P�K¥ z �q� �$| ��� ±

£ z � � < � 3�� w����$| � � } ��� sqv "íw�� � � � s ��� s@¨���¯� � 42(83 �`� 7 � < � 3�� " � '�7�=)7" � vns1s � *�� { �#"j~ o = q*s � 384I7 � v = < *

~ = m y ( 7 * (�� � q1s 9*7�( " � { � *�� { � � �� { = m

~ = m y " � >�')(N+ � v,� q1s ~ = m y " � >�'�( ~ + � vns*s � *�� {��*�1�=)7,(!�)= � � �#"j~ o = q*s ~ = y ~ ( 7 * (�� �1�1�

£ z � " 784�< ��= � 7 |Éu,t � w�� � � ��� w��§|z � � � � � � � ��� � v � ��|z � �$| � | � w��§|z � �$| � | � �9s{� �q� ± £ z�w�� �N� ì��wy|wys{�v ���q� � � � � s ��� s@¨���¯�|$s } s{� � w�� � |ɨ*s � v � �$s � v } ���e���ÖÌ } s{�9t � | � |wys{��� � � v � � � *�� { ¢e�]�7� � } |wys{�9t�vIs ��� } w��Nx � { ¦ �t � ��#|z � w���w�|w �q� v � �$s � v } � ��w���|$sl� v ± £ z � v � � �X� |S¨�w �����1��� wy|z � v

� � ° �q���N�q���� � � v � � � w���w��NxGv � �s � v } � � � ¨�z�w } z � v �]� � ��� |$s �N� | � vI�`w�� � |z � � �K¥ | } s{�9t � | � |wys{� ¢ |z �} �q��� *8� { � ¦ � sqv

� � � � �$t � � �N��� } s{�ªt � | � |wys{� �1+ � v ��� � � v � �$s � v } � ��v � � � w���w���x � |�|z � t1s{w��4|*s � � � �t � �X�wys{�2±

Page 48: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

 î � � ���R�. � �������

£ z � � � �$t � ���w�s{�©� � �$|�| � �q� |z � � � } s{� � } s{�9t � | � |wys{�§w��4|$s } s{���w ��� v � |wys{�2¯ + � v � � �$t � � � �Ss{� � u©|z � ì�vI�$|} s{�ªt � | � |wys{� � � v � �s�¨ � � � �| � w�� � � { |$s�|z�w���|$s©t�vs ��� } ��� � � �$t � ���wys{�ís � |z � s@° � v �q��� } s{�ªt � | � |wys{�2±£ z �P��� ìX��wy|wys{�©s ��=�7,(���= � �y��� ° � ��|z � v � �$s � v } � � � � } z � �Nx ��� ¨�zXw �y� �ªs\°>w��Nx � w��4|$s9|z � �ªs{� �q� ±

£ zXw��!w����$| � � } ���N� } ��� v � |wys{� �N� ìX� � �*|z �c�X� �w } �|$v � } | � v � s � |z � �9s{� �q�À�X� | � s � ���Nsq| �N� | � vI�9w�� � zNs@¨v � �$s � v } � � � v ��� � ��� ± £ z�w����ªs{� �q� } s �X���]�1�S� � ��� |$s } s{�4|$vs � � � �4u]|Éu,t � ��s � v � �$s � v } � sqv/w��ªt �y� � � ��|�� � ��u� wGH � v � �4|¬| u4t � �*s � v � �$s � v } �T� � � x � t1s � w } w � ��±�ò � ¨�w ���N�N� �ªs{���|$v � | ��� ° � vu9�Iw��ªt �y���N� ìX��wy|w�s{�ªs � v � �$s � v } � �� � � � �K¥>� �ªt �y� ¯g¨ � } zNs,s{� � " 7�4I< ��= � 7 |$s �1��� � ��� ()7,>�7,=�� v � t�v � � � ��|w���x � ° � w ��� �X�y� } s{�9t � | � |wys{�&�| � tX��¯(���+�7 " 784�< �)= � 7 � ��� ()7,>�7,=

£ z�w�� �7� � } |wys{�À| � �q� � � �| � t � � ��� ��S�Ns`�$| � tX� � v �]� ° � w ��� ��y� ¯42(�7�+ -1- 3 q1s " 342(�7�+ � � �2� '87,=�7

� ��"j~ o = q1s � * = / � ( (,'87 �j~ = q�v y ( 7 * ( � �7�9)4�7 ~ = y " � >�'�( � �1�

£ z � ( 7 * (P� � � " � >�')( } s{���$|$v � } |$sqvI� � v � t � v|ls � |z � � � (�'�7,= | u4t � ± £ z�w�� �7� � } |wys{� } s{��|w�� �N� � } s{�ªt � | � |wys{�w�� " � u�v � | � vC��w��Nx � �s � s{�Nx � �/|z � v � w�� � | �y��� �|/s{� � } s{�ªt � | � |wys{� �q� �$| � t`v � �$s � v } ��� ° � w ��� �X�y� ±   � �NsP�| � tX�� v ��� ° � w ��� �X�y�q� |z �V42()7I+í�7� � } |wys{�&� � �$t � � � ��|z � } � vv � �4| } s{�ªt � | � |wys{� ¢ |zXw���� � �$t � ���wys{�íw�� } � t�| � v ��� w����¦ � � � t � �� � ��|z�w��#� � �$t � � �N��� } s{�ªt � | � |wys{� �X� } � w���|$sª|z � �ªs{� �q� ±

È,s �7� v � ¨ � z � ° � |z � |$s4s � ��|$s �N� ìX� ��� � � ê �N� � } � s �]� v � �$s � v } ���7�X��¡ } s{�ªt � | � |wys{��� ¢ |z � �ªs{� �q� ¦ � � �¨ � } � � �K¥ t�v � �� �]� sqvI� s � v � �$s � v } �T� � � x �T� �w��Nx 42()7I+ ±j�jw�� �q��� u � ¨ � � ����� |$s �q��� v � ��*zNs\¨ } s{�ªt � | � |w�s{���w��À|z�w����ªs{� �q�&� v �]�K¥ t�v � �� ��� ±

r*s{�X�w �N� v � �&w�� } v � � � �4| �7� � } |wys{�íw��Às � v��ªs{� �q� ¯� ��� -1- " ��� ()7,>�7,= q1s " ��� ()7*>17,=� ��� � � ��< � )83*9 ��7 21q �

46()7I+ ~ � ))319'��7 u�v*�£ z�w�� �N� ìX� � ��w�� } v � � � ��| � � � �w��Nx �y� �$| � t§s � } s{�ªt � | � |wys{�2± £ z � 21q w��T� � } � �� � vuL|$s�t �X��� |z ��� vx � � � �4|° �q���N� s � |�s � |z � �9s{� �q�2ñ |z � | u4t � s � � )8319'��7 w������ (�7*>�7�= w����$| ���q� s � " ��� ()7,>�7,= ±

£ zXw�� �N� ìX��wy|w�s{��w��I� Ì |St � v|w } ����� v � u`� � |w�� � u>w��Nx � |zNs � x{z � } s{�ªt � v ��� |$s`|z � �$| � � ��� v �©��� ìX��wy|wys{�©s � |z �w�� } v � � � ��| �e� � } |w�s{�2±¬r � �í¨ � w����$| ���q���$� v � �� � t ¡��K¥ w��|w��Nxªsqt � v � |wys{��� � w �q� u �s9|z � |�|z � uÀ¨*sqv � w��Às � v�ªs{� �q� w } ¨*sqv ��� "�ò �qÌ ��� �$| � v|G¨�w�|z � � � |�s ��9 � * ( � � >§�e� � } |wys{����± £ z � � ��� vIw���x �K¥ w��$|w��Nx �e� � } |w�s{� �q� wy| uw��4|$s9|z � �ªs{� �q� ±�r*s{���Iw �N� v�|z ���N� ìX��wy|w�s{�Às � 9 � * ( v ¢ |z�w���w��#� � wyx{z4| � u � wGH � v � �4| � vIs{� |z � 9 � * ( � v � s � � �w��À|z � � < � 3��`� w � v � vu�¦C¯9 � * ( v -1- ~ 3 q*s � � q*s ~ " 3 q1s " � �9 � * ( v * � o =)3 v q*s ��< 3 v 2*q =83 v

42(�7�+ ~�* 3 v*�£ z�w��#| � �q� � ���7� � } |wys{�Ls �!� �w��Nx �y�]� vx � � � ��| � * ��� � � } v ��� | � � �`�e� � } |wys{�Uw�� "&|z � | �K¥,� } � | � �c|z ��� w � | ����e� � } |wys{�íw�� � �w��Nx �y� �$| � tl±����Iw��Nx 9 � * ( v � � �`� �1� } s{� � �� ��� -1- " ��� ()7,>�7,= q1s " ��� ()7*>17,=� ��� � � 9 � * ( v ~ � u`v*�

£ z�w���w�� �1� |$| � v �X� |#�$|w ��� �Nsq|�w �N���q� ±/��w�vI�$| � ¨ ���q��� 9 � * ( { ¯

Page 49: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

�>��� � ��� ��� � �'��� � �  �

9 � * ( { -1- ~ 3 q*s � q1s � � q*s ~ " 3 q1s " � q*s " � �9 � * ( { * � o =)3 v =)3 { q*s ��<r3 v 2*q =83 v

3 { 2*q =83 {42(�7�+ ~�* 3 v 3 {8�

'�sq|w } � |z � |�|zXw�� �e� � } |w�s{� �K¥ t � w } w�| � u©� � |��|z � sqv ��� vTs �¬� ° �q���X� |wys{�Uw��&|z �G� w � | ���L�e� � } |w�s{�2¯S|z � } s{�9t � Ä| � |wys{�Lu,w ����� w��Nx 3 v s }�} � vI� �1��� sqv � |z � } s{�ªt � | � |wys{� � sqv 3 { ±�T�w��Nx 9 � * ( { � ¨ � } � � } v ��� | ��� � � ¨ ° � vC�wys{�ís � �.�©w��À|z � "À�ªs{� �q� ¯~]�.� � � -1- , = �r3 � s " 3 q1s " 3 q*s " ��<1<19~]�.� � � � 9 � * ( { ~]�.� �

ò � z �q� |$s � � �c� � � wyx{z4| � u � wGH � v � �4|*� � � ��� sqv�|z�w��*� � ¨ �e� � } |wys{�©�w�� } � � �9w�� �q� v ���q� u`| � �q� � �X� |Sw��À�$s{� �} � � � �ª¨ � } � � � � � |z � � � � � � � � �À� sqvª|z �&� w � | ���[� � �½� � � w � | ���[�7� � } |wys{�2± £ zXw���w����$| � � } �í�N� } ��� v � |wys{��q��� s@¨�� �q��� s � |z � sqt � v � |$sqvC��w�� � � |$s �1�P� � ��� w���"¯� � 42(83 �`� 7 � � 3 � s � � ~ " 3 � � '�7�=)7~ u�� � 9 � * ( { ~ u��~ q�� � 9 � * ( { ~ q8�� 7*>�3�(�7 � 9 � * ( v � 7,>)3�(�7~ � � � 9 � * ( { ~ � �3 � 4 � 9 � * ( v 3 � 4* =)< � ��� ()7,>�7�= � =)7�(���= � : * =)< � ��� ()7*>17,=

£ z � * =)< � ��� ()7*>17,=��e� � } |w�s{�Lw�� � t�t � w ��� w��ªt � w } wy| � u�|$s �q��� w��4| � x � v } s{�X�$| � ��|��w�� �©��� � �q����� tXvsqxqv � � ¢ � ���È � } |wys{� � �>± ë{¦ ñ |z�w�� ��� ìX��wy|wys{� �q��� s\¨���w���| � x � v } s{���$| � �4|�]|$sUz � ° � |z � |Éu,t � " ��� ()7*>17,= ±`ò � } � �é�Ns@¨ �ìX� �q��� u � ¨#vIwy| � w�� } v � � � �4|Sw�� � } s{�ªt �y� | ��� u©� � | � v �q� �$| u �y� ¯� ��� -1- " ��� ()7,>�7,= q1s " ��� ()7*>17,=� ��� p � p u v

'�sq| � |z � |�¨ � } � �X�Nsq| � w � |�|z ��� 6 } ��� ���w��í|z � � � � � � � ��� � v � �#|z � � � } ��� ���¯!|z � �wyx{� � | � v � s � � � � w���Nsq| } s{�ªt � |w �X�y� ¨�wy|z �q��� s\¨ � �X�y� s@° � v � s �q� w���x{�Ss � �.���w�� } � |z � v � � �X� |¬s � �.� � w�� " �)<*<�9 w����| ���q� s � ��<1<�9 ±

£ s �K¥ t�v � �I��w��4| � v � �$|w��Nx } s{�ªt � | � |wys{���Tw�� "&¨ � ¨�w ��� � �����§� } s{� � wy|wys{� �q� ±�È>w�� } � ¨ � } � � Ì | � � � � * ¢ wy|v � ê � wyv � �S|z � |#|z � | � �$| ��� s � |Éu,t �5�)<*<�9 w��X�$| ���q� s � " ��<1<19 ¦ � ¨ � � � � � |z �]�7� � } |wys{� � *�"¯� *!" -1- " �)<*<�9 q*s " 3 q*s " 3 q1s " 3� *!" (�42( (�' � 71984 � ��<t( 2*q (�42(

� * ( (,'�7 � (,' � 7�9)4�7 7�9)4'�s\¨ ¨ �qÌ v � v ���q� u � sqv �ª��� vx � v#t�vsqxqv � � w��À|z � "í�ªs{� �q� ¯

* 3 � ( -1- " ��� ()7,>�7,= q1s " ��� ()7*>17,=* 3 � ( p � � *!"j~ p �.� � ( � v ~ p � * 3 � ( ~ p�q�v*�*�

'�s\¨ð|z�w��cw��I� Ì |Tê � wy| � |z � � � � �ª� � � �¤sqv � w�� � vu �e� } |$sqvIw �q�j�e� � } |wys{� �X� |c�$|w ��� ê � wy| � v ���q��� �X��� ± £ z � w �N���s � t�vIs\°>w � w��Nx�� � ¨ ��� ìX��wy|wys{�X� � sqv �K¥ w��$|w���x9sqt � v � |wys{��� � w �q� u sqv � *&w�� � � � �� � �4|w �q� t � v|�s � } v ��� |w��Nx � �� � �����X�N���U��� �Nx ��� x � w�� �T� � �q����� ±cÆLs{� �q� � � v � t � v|w } �X��� v � u � � ���e����� sqv � � } � tX� �X��� |w��Nx�|z � � � � � ��|w } ��s �|z � � �]� � �1�����N���í��� �Nx ��� x � ��w�� � } �y��� � � � � �ªs �X����� vS¨ � uq±

ò �qÌ v � �Ns@¨�v ���q� u§|$s � } | �X�q��� u¤v � �b�$s{� � t�vsqxqv � �9��± £ z�w�� �e� � } |wys{�bv � ��� � t�vIsqxqv � � w�� �¤x{w�° � � �� �M¥ w�� � ��� � � �1� v�s � } s{�ªt � | � |w�s{�&�$| � tX��¯

Page 50: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

# � � � ���R�. � �������

=�� � -1- " 784�< �)= � 7 q*s " 3 q*s � 3 � � 7 3=�� � 4 ~ " + � � � 3)4�7 ~ + 4 � < *

~ � y ( 7 * (�� � q*s � �`42(��� q*s <�(,' � � >

ò �P� � � |z � � 3 � � 7 |Éu,t � |$s �N���q� ¨�w�|z�|z � t1s{��Iw � w � w�|Éu�s � |z � } s{�ªt � | � |wys{�À�Nsq|�ìX��w��z�w��NxPw���|z �c�q��� sq|$| ���� � � �1� v�s � �$| � tX��±gò � } � �&�Ns@¨ } s{�ªt � | �

=�� � v ( ~]* 3 � ( {�� % � � 42( {=�� � v ( ~]* 3 � ( { ( � % <,(,' � � >

�jw�� �q��� u � ¨ � } � � �q��� �s{� � �ªsqv � w��4| � v � �$|w��Nx �e� � } |w�s{� �q� wy| u`|$s`|zXw��#�ªs{� �q� ±*r*s{���w �N� v�|z �P� s ��� s@¨�w��Nx�e� � } |wys{�2¯~ � � � � -1- " 3 q1s " 3 q1s " 3

£ z�w��ªv � ���`|ɨ*s } s{�9t � | � |wys{���©w��½t � v �q���y���Ö� v � | � vC��w��Nxb|z � ° �q���N� s � |z � ì�vI�$|�s{� � |$s } s{�ªt �y� | � ± ¼c� �t1s{��w ��y�T��� ìX��wy|wys{�©s � |z�w�� �e� � } |w�s{�íw���¯� v � � � � { � < � 7���(�7�+ � v ~ o � v m q*s � { � � � � v m �

� '�7,=�7< � 7���()7I+ -*- " 3 q*s ~ " 3 q1s " 3 � q1s " 3< � 7���()7I+ ~ " � v*� * �

"j~ o = q*s � 3)4�7 � v v < *~ = m y ( 7 * (�� � q1s ~ = u = m q�vzy ( 7 * (�� �~ = m y " � >�')( � v m � q*s q*q = m ���`42( � 7 (9*7,( " � 7 p ( � * � v m � �� 7 p ( ~ = u = m q�v,�1�

£ z�w��l| � �q� � � �| � t9w��\� v � v � | � vI��w��Nx�wy|�j° �q���N� s � � v } s{�ªt �y� | � sqv � w � � v v � | � vI��� � � � �$t � � ����� } s{�ªt � | � |wys{�¢ � v mI¦ � wy| � ° �q����� | � � � { � � � � v mK± £ z �R< � 7 ��()7I+L�e� � } |w�s{�L| � �q� � � �w��Nx �y� �| � t¾w��Uw�|� � vIx � � � �4| ��� w�|z � vv � | � vC��w��Nx � � � ° �q����� | ��� ° �q���N� sqvPt � ��Iw��Nx©|z � v � � � w�� �N� vcs � |z � } s{�ªt � | � |wys{�¾w��4|$s *X± £ z �ª�N� ì��wy|wys{�s �.< � 7���()7I+ w����w��ªt ��� ¯Twy|cx{wy° � �\� v �b�9� �Pwy|�cv � �$s � v } �9� vx � � � ��|�±   �S� ìX� �q� ° �q���N� w��cv ��� } z ���2� |zXw���w��v � | � vC� ���2�2�q�M®� �$|w��Nx©|z � v � | � vC� ��� �$| � t } s � �4| ¢ wy|�w��Tt1s{��w �X��� |z � | � } s{�ªt � | � |wys{�b�9wyx{z4|cv � | � vI� � � | � v| � � w��Nx9�Nsª�$| � tX���$sª|z � v � | � vI� ��� v � �$s � v } � } s � ��|#w��I� Ì |�� � } � �� � vIw � u ��¦C±   � |z � } s{�9t � | � |wys{�&� � �$t � � � � �>�t � | } z ���L� tív � �$s � v } � } s � ��|�w��St � �� ��� |$s`|z � ìX� �q� } s{�4|w�� ��� |wys{�2±

ò � } � �^�Ns@¨ � ° �q����� | �À�K¥ t�v � ��Iwys{��� � w �q�[=!� � v ( ( ~]* 3 � ( ~ q�v*� � � � ~]* 3 � ( |��1� ¨�wy|zNs � | � s,sqtXw��Nx�w�� } � |z � |ɨ*s } �q� } ����� |wys{�X� � v � w��4| � v �y��� ° ��� ± ¢ ¼ � v ��� ìX��wy|wys{�&s � * 3 � (&� s4sqt� � sqv q�v ¦C±�Æ � ��uU° � vIw � |wys{���� v � t1s{��w ��y� s{�§|z�w�� �X� �w } �$|$v � } | � v � ±��Nsqv �K¥>� �ªt �y�q� ¨ � } s �����U�K¥ | � � � |z � �$| � | � |$sÀw�� } �����N��� |$v � } � s �|z � } s{�ªt � | � |w�s{�U�$| � t��±�ò � } s �����§�q� �$s � � ����� |z�w����ªs{� �q� w����w �N� |z � �$| � � ��� v � �>,©�ªs{� �q�2�1�q��� s@¨�w��Nx} s{�ªt � | � |wys{���#w�� �À|$s`w��4| � v � } |#¨�wy|zí|z � s � |�Iw �N� ¨*sqv ��� ±

ò z�w �y� |z�w�� �K¥>� �ªt �y� w��/t � vIz � tX�!�ªsqv �c�q� ° � � } ��� |z � �`sq|z � vI�Sw��`|zXw��/| � |$sqvCw �q�Ö� wy|!� � vI° � �!|$sªw ����� �$|$v � | �|z � t1s\¨ � vÀs � �ªs{� �q� � � � � |$s,s �c� sqv �N� ìX�Xw��Nx¾|z �¤�X� �Iw } � � � � ��|w } ��s ��� �$u,�| � �í±ðò �b�q� �$s^t�v � � � �4||z�w�� �K¥>� �9t �y�`� � � �ªs �N��� s �#� �� �q����� ÑqݪÙqÕ=νàIB�ãÔ�Õ �!Ô��lÙ Î4Ü{ÓNÙ\Ü4ã � �$s{� � |z�w��Nx �T� � �q����� w���t � v|w } ����� v � uxqs,s �[� | �N� ìX�Xw��NxN±íÆ � �4ubsq|z � v�ÞPÈ>Ç��]z � ° ���1��� � �N� ° ��� sqt ��� w�� ��� � �q�����Öñ � ��� '�3)465871919;:"<,=1>L� sqv�� � ��u�ªsqv ���K¥N� �ªt ��� ��±*¼ � t � v|w } ����� v#w���| � v � �$| � v � �Nv � � �X�ª��� �Nx �X� x � s � v ��� } |wy° ��� ��w�� � |wys{��� �N� � �L��� � � sqv �q����� �Nx �X� x � s � } s{�9t � | � v�� � �w } ±

Page 51: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

# �

²�� � ¹�� �[Q/¶ S

�T� � �q����� t�vs\°>w �N� � � vCw } z } s ���y� } |wys{�[s � � � � � vIw } |Éu,t � � ���� � ��� s{�[|zNs{� � s � È } z � � � Á ï à � ¨�z�w } zéw��é| � vI�� v �c�X� � ��� s{�&r*s{�9�9s{�©Ç�w��$tbÁ î Ãd± ¢e£ zNs{� �c��� �Nx ��� x � � � zNs@¨ � ° � v �� v �T� u,� � �`w } �q��� uª| u4t ��� ± ¦ £ z � �$| � � ��� v �|Éu,t � �]w�� } �����N� ì ¥>��� Ä � � �[� v � wy|$v � vu�ÄdtXv � } w��wys{�bw���| � x � vI� � v � |w�s{� ¢ v � |wys{� �q� � � � �1� vI�B¦ � sqvI� ���¾� vs{� ��� } zw��4| � x � vS|Éu,t �q�N� � � �w���x �y� Ä � � �©� s �N�X��� Ädt�v � } w��w�s{�ªv ���q��� � � } s{�9t �y�K¥ � s � |w���x Ädt�s{w���|�±jò � s � | � w�� � z � v � |z ��X� �w }�} z � v � } | � vCw��$|w } ��s � |z � � � � � vIw } |Éu,t � } ��� ��#�|$v � } | � v �P� � � v ���=� v�|z � v ���q�N� v�|$s @ � ±è � sqv �N� | � w � ��±

1���0�1 ���B:;G�<�A�C � 6 I I � � < �BC�� ��<�G

£ z � � � � � vCw } |Éu,t � } ��� �� � � ¢ } ��� �� � �U� � � |z�s{� � |z � | � w �c����� s\¨ wy|C¦ � }�} s � ��| � sqvT� � ��u©s � |z � �$| � � ��� v ��T� � �q����� } ��� �� � ��±gò �P�q� �$sª�Nsq| � |z � | � � w�� � � �N� } ��� ��!s � � 6 �>�X� |*�Nsq|Ss � , = ��ñ |z�w��*w�� �1� } �q� � � |z � sqv �N� vt�v ��� w } � | � � � s��Nsq| � t�t � uÀ|$s } s{�ªt �y�K¥ � � � ��� vC��± £ z � � �N� } ��� ���" 71319 s � � ��� zNs@¨ � ° � v � w�� � � �N� } ��� ��#s �, = ��� �#¨ ����� ±

£ z � � � } ��� ���t�vs\°>w �N� ��� � ° � v �q�S�X� �Iw } sqt � v � |wys{�X� } s{�`�ªs{�Ë|$s �q��� � � � � vIw } |Éu,t � � ñ |z � � � w�� } �����N�q�� �ªs{�Nx`sq|z � vI� �X�q�X� wy|wys{� � � ��� |$v � } |wys{� � � � x � |w�s{� � � ��� |wyt � w } � |wys{� �>� � �&� � �s ��� | � ° �q���N� ¯~ u�� y ~ q8� y ~ � � -1- ~� � � 3 � � s 3 q1s 3 q*s 3� 7,>)3�(�7 y 3 � 4 -1- ~� � � 3 � � s 3 q1s 3

Á � 7,>)3�()7 w���|z �*�e� � } |wys{� � tXt � w ����� u �T� � �q�����ÖÌ ��s{� � uct�v � ì ¥ sqt � v � |$sqv � �`w�� � � ñ ¨ � } � � Ì | } �q��� wy|�~ q�� � �1� } �q� � �|z � |#w��S|z � � �N� |$v � } |w�s{� �e� � } |w�s{� � �$sª|z�w��S� � � � w��St�vs\°>w �N��� w��X�$| ���q� ±g�Nsqv �K¥N� �ªt ���q� q,p � � w�� � ê � w�° �q�y� �4||$s�� 7,>)3�()7 ~ p � � � ± ¢e� v � ì ¥ �9w�� � ��z � �j|z � � � � � �$u>�4| � } |w } t�v � } ���N� � } �#� �/w��Nì ¥ �`w�� � � � ¨�z�w } z � s � } s � vI� �q�w�� � s@¨ � v�|z � �í|z � |�s � � ��� |w�t � w } � |wys{��± ¦ÉÃ

'�sq| � |z � | � �©� s � �#ÎÑ{Ï�t�vs@°,w �N���]� wy°,w��wys{��sqt � v � |$sqv ñ |ɨ*s � w&H � v � �4| � w�� � �/s �1� wy°,w��wys{�Gsqt � v � |$sqvI� � v �t�vs@°,w �N��� w��À|ɨ*s���s{�>Äds\° � v ��� t�tXw��Nxª� ��� } ��� �� � �Ss � � � ¯

£ z � } ��� �I�R��� (�7*>*=)319 t�vs@°,w ��� ��¨�z�s �y� ÄÉ� � � �1� v � wy°>w��wys{� � � � v � � � w�� �N� v�sqt � v � |w�s{����± £ z � �$| � � ��� v �w����| � � } � ��s � ��� ()7,>*=83*9#� v � ��� ()7,>�7,=�¢e� � � s � � �N��� sqv�� � |z � � � |w } �q� w��4| � x � vI� �q�q� �$s � �Ns@¨�� � � �Å� wyx{� � �9� ¡ ¦� � � ��� (é¢7� s � � �N����� � � } zXw�� � w���| � x � vI� � ¨�wy|z � v � �Nx ��� ê � wy° �q��� ��|�|$s � | �y��� �$|�ç � Ä � wy|c�wyx{� ���L� w�� � vIuN¦C± �t � v|w } ����� v �T� � �q����� w��ªt ��� � � ��| � |w�s{�¾�9wyx{z4|Pt�vs@°,w �N� sq|z � vGw��4| � xqv �q� | u4t � ��w�� �q��� wy|wys{�b|$sU|z � � � ± '�sq| �|z � |��� ()7,>*=83*9 w�� � � �N� } ��� ���s � " 7�3*9N� v � |z � vj|z � ��s � � �9� wyv � } | � u ñ |z�w���� ��� ���j|z � |�|z � v � w�����s � |$| � �9t�||$s9t�vIs\°>w �N���c�q� �I�w � �íw��4| � x � vI��±

�T��� sq|z � v&� � � � vIw } |Éu,t � � �e�q��� w���|z � } ��� ���� =83 � ( � < � 3*9,� ¨�z�w } z�tXvs\°>w �N� ��|z � sqv � w�� � vu � wy°>w��wys{�sqt � v � |$sqvV~ / � ± £ z ���e� v|z � v*� ��� } ��� �� � 9,<�3�( � � > } s{�4| � w����*|$vIwyxqs{��s{� � |$vIw } �N� sqx � vIw�|z��9w } �,� � �©�K¥ t1s{� � �4|w �q��e� � } |wys{����±

£ z � " 7�3*9 � =)3 ��� �N� } ��� �I��s � � =)3 � ( � < � 3*9í� � � " 7�319 t�vs@°,w �N� � �í�e� � } |wys{� +)=�<�+�7�= � =83 � ( � < � � ¨�z�w } z�N� } s{�ªt1s{� � � � � � � �1� v�w���|$s`w�|��¨�zNs �y�P� � �í� v � } |wys{� �q� t � vI|� �X� � �U� } s ���y� } |wys{�Ls �j�7� � } |wys{���S|z � |#vIs � � �|$s`w��4| � xqv �q� ° �q���N� � � u � wGH � vIw��Nx�v ����� ��¯+)=�<�+�7�= � =83 � ( � < � -1- ~ � =83 � ( � < � 319 3 y ��� ()7*>,=83*9 � � � s 3 q1s ~"� y 3 �(1=!� �`� 3�(�7 y =�< � � � y* 9,<1<,= y � 7 � 9 � � > - -1- ~ � =83 � ( � < � 319 3 y ��� ()7*>,=83*9 � � � s 3 q1s �

Page 52: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

#qç ��� �[� � �����

£ z � " 7�3*9 � 9,<�3�( � �N� } ��� ��Gs � � 9,<�3�( � � >é� � � " 71319 � =83 �§t�vs\°>w �N� �`�$s{� � �$t � } w �q� w&% ���^�7� � } |wys{��� � sqv� J } w � �4| � }�} � ��]|$sL|z � } s{�9t�s{� � ��|��s ��� � s � |w��Nx Ädt1s{w��4|c� � � �1� v � |z � ãCdAB>Ñ Î1ãKÎXÏ � � � âCÕyÜqÎXÕ �!ÔCÙ ÎÒ ± £ z ��$| � � �X� v � |Éu,t � � � 9,<�3�(©� � � � < � � 9,7G�e�q��� w�� } ��� �� " 71319 � 9*<13�( ±

1���0 / ��4 �BI � < �BC�� G�� ���B:��HGL<�I

¼ � |z � �$| � � ��� v � � � � � vIw } | u4t � � � ��� (X� ��� ()7,>�7,=�� � 9,<�3�(���� � � � < � � 9*7í� v � tXvIw��9wy|w�° � ± £ z � sq|z � vI� � v �� �q�N��� vs{��|z � � �P� u�| u4t � } s{���|$v � } |$sqvI��±�1< �)+�9,7 p ¢7� s � � � w��é|z �À� w � v � vIu �1< �)+�9,7 p ¦]w�� � | u4t � } s{���$|$v � } |$sqvG|z � |G� � �q� � � } s{�ªt �y�K¥ | u4t � w��

} ��� �� � 9*<13�( � � >ª� vs{� � " 71319 � 9*<13�( | u4t � ¯�)3�(83 ~ " 7�3*9 � 9,<�3�( 3 � � s �1< �)+�9,7 p 3 � � 3j- u �"3 ��7�= � � � � > ~ � 6 y ��7 p ( �

£ z � � �$u,� � s � � � v � �$|$vCw } |� � �� �X� x{� ñ |z � � � ¨ � v �[� w�� } � �� ��� w�� È � } |wys{� � ± ë,± '�sq|w } � |z � } s{�4| �K¥ |" 71319 � 9*<13�( 3�� ¨�z�w } zcv � �$|$vIw } |�2|z �¬� vx � � � �4|�| u4t �qñ |z � � � |z � �| � � ��� v � } s{�9t �y�K¥ |Éu,t � � � v � �1< �)+�9*7 p � 9,<�3�(� � �V�1< ��+�9,7 p � < � � 9*7 ±gò � } � � �q� �$sP� ����� vIs{�ð|z ���)3�(83]�N� } ��� v � |wys{�9|z � | � } s{�9t �y�K¥ � � � �1� v¬w��g¨�vIwy|$| � �d - u á ñ |z ��� vx � � � �4|� � v � |z � } � v| � �w � �Lv ���q�l� � � w�� � x{w�� � vu�t � v|� � v � �$t � } |wy° ��� uq±�È>w�� } � - u w�� ����� | �} s{���$|$v � } |$sqv � ¨ � } � � � � � wy|#w��Àt � |$| � vC�&� � | } zXw��NxN¯� < ��� �)>)3�()7 -1- ~ " 7�3*9 � 9,<�3�( 3 � � s �1< �)+�9,7 p 3 q*s �1< ��+�9,7 p 3� < ��� �)>)3�()7 ~ p - u � � � p - u ~ q � �

È>w��9w ��� v � u � |z � |Éu,t � } s{�X�$|$v � } |$sqv " 3�( � <í¢7� s � � � w��©|z � " 3�( � < � 319�� w � v � vIuN¦/� � �q� � � v � |wys{� �q� | u4t � w��} ��� �� " 7�319 � =)3 � � vs{� � �Lw����$| � � } � s � ��� (�7*>,=8319 ± ¢ " 3�( � < � 3*9 w�� � | u4t � �u,�Ns{�4u>� � sqv " 3�( � < ��� ()7,>�7,= ± ¦" 3�( � <�� zNs@¨ � ° � v � w�� � � � � �$|$v � } |P|Éu,t � } s{���$|$v � } |$sqv�±   ���$| ���q� s �S�L��� | � } s{���$|$v � } |$sqv � w �q�n- u � v � |w�s{� �q� �� � � |z � ��� Ì��7� � } |wys{�¾|$s � sqvC� � v � |wys � vs{��|ɨ*s¤w���| � x � vC��±   ���$| ���q� s � t � |$| � vI�Ë� � | } z�w��Nx � } s{�ªt1s{� � �4|�K¥ |$v � } |wys{� �e� � } |w�s{��� � v � t�vIs\°>w �N��� ¯~�� � -1- ~���� (�7*>*=)319N3 � � s 3 q*s 3 q1s " 3�( � < 3� � ��7,=)3�(�<,= y ��7 � < � � � 3�()<�= -1- ~���� (�7*>*=)319N3 � � s " 3�( � < 3 q1s 3

ò z�u¤|z �9� wGH � v � � } � " r*s{�9t �y�K¥ � � � �1� vI��w�� } � v| � �w � � � sqvC� � v �`� ��w�ê �N�A� |z � v �G� v � �Ns&�Ns{�4|$vIwy°>w �q�w �N� �4|wy|w � ��w��4°qs � °,w��Nx - u ±P¼c�U|z � sq|z � vcz � � �2� v � |wys{� � v � ��sq| � ��w�ê �N�q���X� |Tz � ° �ª� } � �Ns{��w } �q�*¢ v ���X� } ��� ¦� sqvI� |z � |�|z � w��ªt �y� � � ��| � |wys{�és � |z ��� � �$|$v � } | ��� | � | u4t � � � �$|�� � w��4| � w�� ñ wy|�w��]�Nsq|�� � } � �� � vCw � u¤|z �} � � �q��� sqv#w����| � � } �q� |z � |�� � ��7�=83�(�<,= ~ p � � � w�� � ê ���q� |$s p �>�q� |zNs � x{zÀ|z � v ���q� t � v|�s � p - u � w�� �q� ¨ � u,� p ±

1���0 � ���B:;G�<�A�C ��4+G�<�C-A24 �BI � � �7G�<�624 ��G�� � A�� G�< 62I

£ z � È,| � � ��� v �×� v �����X�N�§� � �×� w � v � vIw � �`t�vIs\°>w �N� � � ° � v �q� s\° � v � s �q�N��� �e� � } |wys{�X��|z � |&� � v° �b� � �K¥ t � w } wy|} s � v } wys{����¯

Page 53: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

���>��� � ��� � � ����� � �� ���Z �������� #që

* =�< � ��� (�7*>�7�= -1- ~� � � 3 � � s ��� ()7,>�7,= q1s 3* =�< � " 3�( � < � 319 -1- ~ � =83 � ( � < � 319 3 � � s " 3�( � < � 319 q*s 3()< ��� (�7*>17,= -1- ~���� (�7*>*=)319N3 � � s 3 q*s ��� (�7*>17,=()< " 3�( � < � 319 -1- ~ " 7�3*9 � =)3 � 3 � � s 3 q*s " 3�( � < � 319* =�< � ��� (�7*>*=)319 -1- ~���� (�7*>*=)319N3 y � � � � � s 3 q*s �* =�< � " 7�3*9 � =)3 � -1- ~ " 7�3*9 � =)3 � 3 y � =)3 � ( � < � 3*9 � � � s 3 q1s �* =�< � ��� (�7*>*=)319 � * =�< � ��� (�7*>17,= :x(�< ��� ()7,>�7�=* =�< � " 7�3*9 � =)3 � � * =�< � " 3�( � < � 319 :�()< " 3�( � < � 319

£ ¨*s¤s � |z � � �À� v � w��9t � w } wy| � u � � ��� |$s¤t�vIs\°>w �N� s\° � v � s �q����� � � � � vIw } � wy| � v �q� ��¯ � �^w��4| � x � v9� � � � v �q�¢ ¨�wy|z�s � | �©�N� } w�� �q� t1s{w��4|C¦�w�� � } | ���q��� u � ê � wy° �q�y� �4|�|$s � � � tXt � w } � |wys{�Ls � * =�< � ��� (�7*>17,= |$s�|z � ° �q���N� s �|z � � � � � v �q�¬� � � �N��� ()7,>�7�= ±bÈ>w��9w ��� v � u �l� � s � |w��NxU� � � � v �q�T¢ ¨�w�|z �§�N� } w�� �q� t1s{w���|C¦Pw��Pv � x � v �N���^� �� � � tXt � w } � |wys{�&s � * =)< � " 3�( � < � 3*9 |$s�|z � ° �q���N� s � |z � � � � � v �q�l� � � " 3�( � < � 319 ± £ z � � � 7 z � ��|z � | u4t �~� � � 3 � � s 3��,� � � 7 : | z � �*|z � |Éu,t � ~ � =)3 � ( � < � 3*9t3 � � s 3 ± £ z�w��!� ��� ���*|z � |*¨ � } � � � � � � � � � vIw }� wy| � v �q� ��w��Àx � � � vIw } � � � � vIw } �7� � } |wys{��� �N� sqv �K¥N� �ªt �y� ¯'�3*9 �)7 -1- ~ � =83 � ( � < � 319 3 � � s 3 q*s 3'�3*9 �)7 p � p �;( : k

£ z�w��!v � |z � v�w�� � wyv � } |*¨ � u©s � s\° � v � s �q� w��Nx9� � � � v �q� ��z � �S|z �P�q��� wy|wys{� �q�1�q� ° � ��| � x � |z � |�|z � � � |z�s � s �w��4| � vt�v � |w��Nx � � � � � v �q�X� � � � � � ��� v!s ��� x{w�° � �`| u4t � } � � �1� �$t � } wyì ��� w�� � � ��� ()7*>,=83*9 sqv � =83 � ( � < � 319w����| � � } �P�N� } ��� v � |w�s{� ¢ �w�� } � * =�< � ��� (�7*>�7�=9� � � * =)< � " 3�( � < � 3*9�� v � sqt � v � |$sqvC��s � |z�s{� � } ��� �� � � � v � �$t � } Ä|wy° ��� u�¦C±¬�Nsqv �K¥>� �9t �y�q� |z � � � w����| � � } � s � ~1" 71319 � 9*<13�( 3 � � s �*< �)+�9*7 p 3 } s{��| � w����#|z�w���� � |zNs � ¯

* =�< � ��� (�7*>�7�= p � * =�< � ��� (�7*>17,= p - u (£ z�w��*� � u>��|z � | �\�1< �)+�9*7 p w����$| � � } � s � * =)< � ��� ()7*>17,= w�� �N� ìX� ��� |$s9tXvs �X� } �T� } s{�9t �y�K¥ � � � �1� v*¨�zNs{� �v ���q� t � v|�w���� � t�t � w ����� u � � � t�t�vsqt�vCw � | � " 7�319 � 9,<�3�( w����$| � � } � s � * =)< � ��� ()7,>�7�= ±   �í|zXw���� � ��� � v �N� ° � �� � � vÄ �N� ìX� ��� � � � � vIw } | u4t � � ¢ � � u � ê ��� | � vC��wys{���C¦ } � �U� � �q�]� � � s � s@° � v � s �q�N��� � � � � v �q� ��±

� � � �Nsq|z � v �K¥>� �9t �y�q� v � } �q��� s � v#ì�vI�| �N� ìX��wy|w�s{��s � � ��� � vIs{� È � } |wys{�Lç,¯� ��� -1- ��� ()7,>�7,= q1s ��� ()7,>�7,=� ��� � � � u�v

  x{�NsqvIw��Nx`|z � | u4t � �wyx{� � | � v �q� |z � �ªs{�$|Tx � � � v �q� |Éu,t � s � � �`�`w��l~� � � 3 � � s 3 q1s 3 ± £ z �]�K¥ t � w } wy|#| u4t ��wyx{� � | � v � w�� �y� x �q�d� zNs@¨ � ° � v � �w�� } � w�|Pw��ªÝ9Ñ Ðã`â BNãIÔ�Õ �!ÔP|z � �b|z � t�vIw�� } wyt �q� |Éu,t �U¢e� �ªsqv � x � � � v �q� | u4t ��wyx{� � | � v � ¨!s ����� } �q� � �9� �$| � |w } � vvsqvK¦C± £ z � |Éu,t � �wyx{� � | � v � z � ��|z �ª� H � } |�s � v � �$|$vIw } |w��Nx � �`� Ì ��| u4t �q�� � � w��À|z�w�� } � � � ¨!s ����� } �q� � � �$s{� � |z�w��Nx � w �q� � �`�b~ v -*- � 9,<�3�( � |$s �1� w ��� Äd|Éu,t ��� ±

1���0 � �EG�� ��V6������B:;G�<�A�C DF8�=HGLI

r*s{���Iw �N� v�|z ��� s ��� s@¨�w��Nx �e� � } |wys{� �N� ì��wy|wys{�2¯= �z4 -1- ~ � 9*<�3�( � � > 3 � � s 3 q1s 3 q*s 3= �z4 p � � 4 6 =1( ~*~ p � {tu � � {�� � ( : k �

£ z �©�K¥ t�s{� � ��|w � |w�s{� �e� � } |w�s{� ~ � � ¢ s{� � s � |zNv ���í� w&H � v � �4|G�$| � � ��� v �Ë�K¥ t1s{� � ��|w � |wys{�ésqt � v � |$sqvC�G¨�wy|z� wGH � v � �4|g|Éu,tXw��Nx{� � � ��� @ � ± î ± #{¦/z � �/|z � | u4t � ~� � � 3 y ��� (�7*>*=)319 � � � s 3 q1s � q*s 3N�4� � � �w�� } � { z � �|z � | u4t � ~� � � 3 � � s 3N� |z � |Éu,t � s � p � { w���~� � � 3 y ��� (�7*>*=)319 � � � s 3 ± £ z�w���w�� � tXvs �X�y� � ñ |z � v �

Page 54: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

#M � � �X�.�[��� �

w��#��s`¨ � uí|$s`v � �$s � ° � |z � s\° � v � s �q� w��Nx � ��$s } w � | ��� ¨�wy|zí|z � | u4t � ° � vIw � �X�y� � � �w�� } � wy|�w��#w��í|z � } s{�4| �K¥ | ��X� |�z � ��sq|z � v¨�w�� � ° � ��w��z ���¾� vs{��|z � |Éu,t �`�K¥ t�v � ��w�s{�2± h¬�I� � ��|w �q��� u � |z � tXvsqxqv � �9� � vGz � ���$t � } wyì ���|z � | p �zNs �X���§��� �Iê ��� v ���2���X� |Pz � �P�Nsq|]�$t � } wyì ��� ¨�z � |z � v]wy|P�IzNs �����§�1� �ê ��� v ��� ¨�w�|z � � ��� ( sqv � ���� ()7,>�7,= ° �q���N� s � |ɨ*sN±S¼ � } s � vI� �q� ¨ � } � �Lì ¥ |zXw���¯= �z4 p � � 4 6 =1( ~*~ p � ~ { -1- ��� (�7*>�7�= � u � � ~ { -*- ��� ()7,>�7�= �1� � ( : k �

  | Ì �#s � °,wys � �S|z � |#|z�w����$sqv|�s � |z�w��NxG¨�w ��� �$s4s{�&xqvs\¨ |wyv � �$s{� �q� zNs\¨ � ° � v�±  � �e� } | � |z�w�� � w�� � s � s\° � v � s �q� w��Nx � � � wyx � wy|ÉuÀw����Nsq|#v � �$|$vIw } | ��� |$s�� � � �1� vI��¯4�'8< �j~ =�7�3 � � p � � � �

� �G¨�z � |ª|Éu,t � w��G|z � �$|$vIw���x¤� � t�t1s{� ��� |$s ��� v ���q� " £ z�w��Gw��G�ªsqv � � � vIwys � ��|z � �^|z �í�K¥ t1s{� � �4|w � |wys{�� � � wyx � wy| u �4�1� } �q� � � |z � v �q�>� �4ux��� ()7*>,=83*9 w����| � � } � ¨�w ����� s � ¨�z � v ��� �!z � v �q� ° � vIu � wGH � v � �4| �1� z � °>wysqv } � ��1���K¥ t � } | ���U�N� t � � � w��Nx�s{�&¨�z � |#w����$| � � } � s � �)7 p ( w�� � � ��� |$s9v � �$s � ° � |z �P� � � wyx � wy|Éuq±

Ê*� } �q� � � s � |z �G� wGH � v � � } �]�1� |ɨ ��� �§|z � � � � � vIw } � � � x � � � v �q� } � � � �cs � |z � s\° � v � s �q� w��Nx � � � wyx � wy| ut�vs ��y� � �#�T� � �q����� t�vs@°,w ��� � � �$s ��� |wys{��|z � |Àw���v � �$|$vIw } | ��� |$s½� � � �1� vI��¯ h � } z �ªs ������� � � u } s{�4| � w��� Ò�ã DKÙ Ó>Ú Ï`Ò�ãIÔ�ÚyÙ ÐÅÙ{ÏeÕeÑ Î�� } s{�X�w��$|w���x[s � |z �b�q� u4¨*sqv � ��7 * 3 ��9�(½� s ��� s\¨ ��� � u � t � v � �4|z � �w?% ���2� } s{�`� � Ä� � t � v � | ���U� w��$|�s � � � � � vIw } �ªs{��sq|Éu,t � � ¢ |Éu,t � ��¨�w�|z&�Ns9° � vIw � �X��� �C¦C±!ò z � � � � � � � wyx � s � ��|Éu,t � ° � vCw � �X�y�w�� � w�� } s\° � v ���×¢ � � } z � ��� ��� � s\° � ¦ � w ��� | �y��� �$|Ps{� � s � wy|� } ��� �I� � �]w���� � � � vIw } � � �[�q��� s � wy|� } ��� �� � � � v ��$| � � �X� v �2� |z ���N���7�q�X� | � w��$|�w�� } s{��� ��� | ������� � � |z � ì�vI�$|�| u4t �P� vs{��|z ��� w��$|�|z � |�¨�w ��� � � |w�� � u©|z � } s{�4| �K¥ |s � |z � | u4t � ° � vCw � �X�y� w�� � � ��� ±��Nsqv �K¥N� �ªt �y�q� w � |z �ª�N���e�q��� | �N� } ��� v � |w�s{� ��7 * 3 ��9�( ~���� ( y � 9,<�3�( � w��Tw��� H � } | � |z �]� � � wyx � s � � �K¥ t1s{� � �4| � � s\° � ¨�w �����1� v � �$s � ° ���L� �#|Éu,t � ��� ( ± ¢ È ��� @ ÂN± ë,±è � sqv��9sqv �P�N� | � w � ��± ¦

£ z �9�$�N���7�q�X� | �N���7�q�X� | ¡ w��i~���� (�7*>�7�= y � < � � 9,7 � ���X� |i~���� (�7*>17,= y " 3�( � < � 319 y � < � � 9*7 � � � u �q� �$s �1�� t�t�vIsqt�vIw � | � ± � � vu } �q� |w�s � ��t�vsqxqv � �9� � vI�#� � u©t�v ���7� v �17 * 3'��9�( ~ � � ¨�z�w } zÀtXvs\°>w �N� ���Ns �N���7�q�X� |��±

²�² � ·]¸9¹ OcQ;S

� �T� � �q����� tXvsqxqv � � } s{���w��$|�¬s ��� } s ����� } |wys{�`s � Ý9Ñ�ÒqÓ,Ú�ãBâB± � �ªs �����y� w�� ��� � �q����� � � v° � �¬|z �������q� t � vt1s{� �s � } s{��|$vIs ��� w��Nxª� � � � ÄÉ�$t � } � � � � � } v ��� |w��Nx � � �$|$v � } | �X� | � |Éu,t � ��±

£ z � |$sqt �y� ° ��� s ��� �ªs �X���y� } s{�4| � w���� � �4u¾s � |z � ° � vCwys � � �N� } ��� v � |wys{�X�]¨ � z � ° �í� w�� } � �� ��� ¯�ì ¥ wy|Éu�N� } ��� v � |wys{��� �N��� | �ª� � � | u4t ���N� } ��� v � |wys{��� � } ��� �� � � � w����$| � � } ���N� } ��� v � |wys{��� � | u4t � �wyx{� � | � v � � �>�7� � } |wys{��N� ìX�Xwy|wys{��� ��� � � t � |$| � vI� � w�� � w��Nx{��±�h ¥ } � t�| � sqv�|z �©�7� } |�|z � |Gw��ªt1sqv| �N� } ��� v � |wys{��� ¢ |$s �1�©�N� � } vIw �1����zNsqvI| � uN¦�� � �$| � tXt ��� vjì�vC�$| � |z �*��� } ��� v � |wys{���j� � u � t�t ��� vjw�� � ��uPsqv �N� v ¢ |z � |$sqtNÄ �y� ° ��� � } sqt � w���� � | ���q��� uv � } � vC�wy° � ¦C±

�T� � �q�����ÖÌ �¬�ªs �X���y�S�N� �wyx{�ªw��jv ����� |wy° ��� u } s{��� � v° � |wy° � ¯j|z � � � � � ÄÉ�$t � } � s � �ªs �����y� �gw�� } s{�9t �y� | ��� u �X� | �� � � �9s ���X�y� � � v � w��í�Nsª¨ � u � ìXvI�$|ÅÄ } ��� ���± ¡ Æ&s ������� � � � � � � v �]�q� tXz � � � � � vIw } � � � � � �$| �1� x{w��À¨�wy|z � �� t�t � v } � � ���y� |$| � v�± £ z � v � w��!��s � sqvI� �q� } s{��� � } |wys{� �1� | ¨ ��� � �G��� � �q����� �ªs �X���y��� � � |z � ì �y� �$u>�$| � � |z � |¨*s �����[¢ | u4tw } �q��� u�¦S� � tXt�sqvI|#wy|�±   �Lt � v|w } �X��� v � |z � v � w��#��s } s{��� � } |w�s{� �1� |ɨ ��� �¤�ªs �����y� � � � � � � � � ì �y�� � � � � ��� � � �ªsqv � |z � �Us{� � �ªs ������� } s ����� } s{� } � wy° � �X� uÀv � �w ��� w�� � �w���x �y� ì �y�©¢ s{� � �9s ���X�y� � � u � ° � ��$t � �L� � ° � v �q� ì �y� �C¦C±�¼ � } s � vI� �q�� t � v|w } ����� v#w��ªt �y� � � ��| � |wys{�&¨�w ��� �ªs{�$| � w �q��� u �q� sqt�| } s{�4° � �4|wys{����|z � |� � �q� |z � } s{��� � } |wys{� ��� | ¨ ��� �U�ªs �����y� � � � � ì �y� ���ªsqv � �$|$vIw��Nx � �4|�±

£�� } z��Xw } �q��� uG�$t ��� � w��Nx ��� �9s ���X�y� w��gv ���q��� u ®� �$|¬s{� �#� wyx �N� } ��� v � |wys{�9¨�z�w } z �1� x{w����g¨�w�|zª|z �#�q� u,¨!sqv ���<��!��9*7>ñ z � v �qÌ � � � �K¥N� �ªt ����� sqv � �9s ���X�y� ¨�zNs{� � � � � � w�� �1=�717 ¯

Page 55: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� � ��� ��� � � � � ���R� � ���� #�#

��<��!��9,7��1=�717 ~ �*=)717 ~ ( 7�3 * y �*=83 ��� ' � y * = � � >17 � � '87,=)7�)3�(83��1=�717 3 �)( 713 * 3����1=)3 ��� ' ~ �1=)7*7 3 � ~ �1=�717 3 �* = � � >17j-1- �*=)7*7 3 q1s w 3 }* = � � >17 ~ ( 7�3 * p�� � w p*}* = � � >17 ~ �*=83 �`� ' 9*7 * ( = � >�')( � � * = � � >�7 9,7 * ( u*u * = � � >17N= � >�'�(

£ z � |Éu,t � �1=�717G� � � |z �T�7� � } |wys{� * = � � >17 �zNs �X���9�1���e� �9w � w � v ñ |z � u9¨ � v � x{wy° � � � � �K¥>� �9t �y� �Sw��©È � } |wys{�ç,± ç,± � ±©Á Ê*� } �q� � � s � |z � � '87,=�7í�q� u4¨*sqv �2����� uqs � |�w�� � } |wy° �9� |c|z � |$sqt �y� ° ��� s �!� �ªs �����y�q�1� � � |z � �c|z ��N� } ��� v � |wys{���c� � �$| �q����� w�� ��� t¤w��L|z � � � � � } s ��� �9� ¢ |Éu,tXw } �q��� uL|z � ì�vI�$|C¦C± �T� �$sÀ�Nsq| � |z � |c|z � �ªs �����y�� � � � w���|z � � � � ��� �#|z � |#s � |z � | u4t �qñ |zXw���w�� �q��� s@¨ ��� ± Ã

£ zXw��¬�ªs �������#�K¥ t � w } wy| � uLãCdAB>Ñ ÐKÏ7â �1=�717N� ( 713 * � �1=)3 ��� '�N� � � * = � � >�7 ±   � |z �T�K¥ t1sqv| � w��$| � s ��� s@¨�w��Nx�|z ���<��!��9*7��q� u4¨*sqv � w��2s{�9wy|$| ����� ÙqÚ=Ú�s � |z � � � � � � � s � � ��� |�|z � |$sqt ��� ° ��� s � |z � �ªs �X���y� ¨*s �������1�/�K¥ t1sqv| ��� ±¢   �G|z ��� � s@° ���K¥>� �9t �y�S� ° � vu,|z�w��Nx�w�� �K¥ t � w } wy| � u �K¥ t1sqv| ���2� �s�|z �S� H � } |/¨*s �������1� |z � � � � � ± ¦F'�sq| � |z � ||z � � � � � s �!� |Éu,t ��� � � wy|� } s{���$|$v � } |$sqvC�Tz � ° ����� xqvs � t ��� |$sqx � |z � v ��� ��w�� �*=)717 ~ ( 7�3 * y �*=83 ��� ' � ± � ��zNsqvI|ÅÄÉz � � �2� ¨ � } s �����í�q� �$s9¨#vIw�| � �*=)7*7 ~ :*: � ±�h ¥ t1sqv|w���x � � �N� � � |�s � |z � } s{�X�$|$v � } |$sqvI��w�� �q� �sªt�s{�I�w �X�y� ±£ z � � � � � ��w�� � � �K¥ t1sqv| � w��$|*� ����� �Nsq| �1�T� s } �q� |$sª|z �c�K¥ t1sqv|w��Nx��9s ���X�y�qñ,� �4u�� � � � w���� } sqt � � � u �1�� w��| ��� w�� � � �K¥ t�sqvI| � w��$|�±

£ z � �*=)7*7 �ªs �����y� � � uÀ��s\¨ �1� Õ7Ý�BNÑ ÐBÏÉãIÒ�w���|$s9�s{� � sq|z � vT�ªs �X���y� ¯

��<��!��9,7 � 3 � � ~ �`3 � � � � '�7�=)7� ��+�<,=*(��1=�717 ~ �*=)717 ~ ( 7�3 * y �*=83 ��� ' � y * = � � >17 ��`3 � � � +)= � � ( ~]* = � � >�7 ~ �1=)3 �`� ' ~ ( 7�3 * v*� ~ ( 7�3 * {��*�1�

£ z � ° � vIw�s � �#wy| � �9� ��� w��Nx9w��ªt1sqv| ��� w��4|$s � � �&�K¥ t1sqv| ��� s � |#s �g� �ªs �������c� v � } �q���y��� ãKÎXÏeÕeÏeÕÖãKâC±@'�sq| � |z ��K¥ t � w } wy|Pw��ªt1sqv| � w��$|�w��¾|z � w��ªt1sqv| �N� } ��� v � |wys{� ñ s{�9w�|$|w��NxLwy|]¨!s ����� } �q� � �©�q���/� �4|wy|w � � �K¥ t�sqvI| ���¾� vs{��1=�717 |$s �1� w��9t�sqvI| ��� ±

1�1 0�1 � � 6�A �VG � � :;GLI

£ z � v � w�� � �9s � °>wys � �gt�vIs �X�y� � ¨�wy|z`w��ªt1sqv|w��Nxc� � � � � � wyv � } | � u�w��4|$s�|z � � � � � �$t � } � s � �9s ���X�y� ±lò z � |!w �|ɨ*sÀw��ªt1sqv| ��� �ªs ������� � } s{��| � w�� � wGH � v � ��| � �4|wy|w � ��¨�wy|zL|z � � � � � � � � � " �T� � �q����� �$s � ° � ��|z�w��#tXvs �X�y� �� �w��Nx ��Ó�Ù Ú Õ �SãÒ¤ÎÙqÝ9ãKâ�± � �éw��ªt1sqv| �N� } ��� v � |wys{�[� � u � � � |z � 6 ��319 � * � 7 �&�q� u,¨*sqv � |$s } �q� � � |z � w��GÄt1sqv| ��� � � � � ��|$s �1� t�v � ì ¥>���&� uÀ|z � � � � � s � |z � �ªs �X���y� w��ªt1sqv| ��� ± £ z � � � t�v � ì ¥,� � � v �]� s ��� s@¨ ���L� u|z � � :IÌ } z � v � } | � v�¨�wy|zNs � |Tw��4| � v° � ��w��Nx`¨�z�wy| � �$t � } � ±�Á�� ���q� wyì � vI� � v � t � vI|�s � |z �G�y�K¥ w } �q� �u,�4| �M¥ ± £ z � � �� : p � � � � : p � v � ê � w�| �T� w&H � v � �4|�¯j|z � ì�vI�$|Sw�� � ê ���q� wyì ��� � � � ��� � � |z � � � } s{� �í�G� � � s � |z � w��Nì ¥ � :CÌ�e� � } |wys{�2± Ã���sqv �K¥N� �ªt �y�q��� �Iw��NxG|z �5�1=�717 �9s ���X�y� w���|$vs ��� } ���í� � s@° � ¯

Page 56: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

# � � � �X�.�[��� �

��<��!��9,7 � = � � >�7 ~�* = � � >17 � � '87,=)7� ��+�<,=*(��1=�717 ~ �1=�717 ~ :1: �1�* = � � >17j-1- �*=)7*7 3 q1s w 3 } q1q � � � * * 7�=)7 � ( �17 * � � � ( � < � < * * = � � >17* = � � >17 ~ ( 7�3 * p�� � w p*}* = � � >17 ~ �*=83 �`� ' p � � � * = � � >17 p��<��!��9,7 � 3 � � � '�7,=�7� ��+�<,=*(��1=�717 ~ �*=)717 ~ ( 7�3 * y �*=83 ��� ' � y * = � � >17 �� ��+�<,=*( 6 ��319 � * � 7 � � = � � >17 ~ * = � � >17 ��`3 � � � ��< +�= � � ( ~]* = � � >�7 ~ �1=)3 ��� ' ~ ( 713 * v*� ~ ( 713 * {8�1�1�

+�= � � ( ~ � = � � >�7�: * = � � >�7 ~ �*=83 ��� ' ~ ( 713 * v,� ~ ( 713 * {8�1�*�È,s{� �§��� � �q����� t�vIsqxqv � �9� � vI�`t�v ���7� v`|$s � � � ê ���q� w�ì � vI� � sqv �q��� w��ªt1sqv| ���½� �4|wy|w � � � � � � w���x¾|z � �s � v } �s ����� } z � � � �&�K¥ t � w } wy|ª¨�w�|z � ° � vu � � � ± ¼c|z � vI�9tXv ���=� v©�zNsqv|�� � � � � � � � s{� � u � � � ê ���q� wyì � vC�G¨�z � �� � �$s ��� | ��� u�� � } � �� � vuq±

� �X�q� wyì � vI� � v ��� � ��� |$s�v � �$s � ° � } s{� � w } |� �1� | ¨ ��� � � wGH � v � ��| � �4|wy|w � �j¨�z�w } zGz � ° � |z � � � � � � � � � ± ÊS� |¨�z � |Tw � |z � � � � ��� ��|wy| uLw���w��ªt1sqv| ���&� vs{� �ªsqv � |z � �Ls{� � �ªs ������� "¾�NsqvI| � � � | ��� u � � � } zU� � � � } ��� �Iz � �� v �À�q��� s@¨ ��� ¯ � � � �4|wy|Éu } � � �1� w��9t�sqvI| ���¾� ub° � vIw�s � �]vIs � | � �]¨�wy|zNs � | } s{� � w } |�± £ z � } s{�ªtw �y� v � �Ns@¨��¨�z � |z � v � ��|w�|w � � � vs{� � wGH � v � �4|#�ªs �����y� � � v �]� } | �X�q��� u©|z � � � � � ±

1�1 0 / ���@I � < C�� � � ;DF8+=HGJI

� �w �N�À� vs{� } s{�4|$vs ��� w���x¤� � � � �$t � } � � � �ªs ������� ��tXvs\°>w �N� |z � s{� � ué¨ � u½|$s �� w ���Ë� � �$|$v � } | ��� | � |Éu,t � �¢e� Þ £ �C¦Tw�� �T� � �q����� ±G�Nsqv �K¥N� �ªt �y�q� |z � } z � v � } | � vCw��$|w } �7��� | � v � s �*� � � Þ £ w��T|z � |�|z � Ðã�BÐãBâ�ãKÎXÏdÙqÏeÕÖÑ ÎÏeá�BNãGw���K�ÕÖÒ{Ò�ã�Î ñS�q��� sqt � v � |wys{����s{�[|z �À� Þ £�� v �À� s{� �À� | � � � � �$|$v � } | �y� ° ��� ¨�z�w } z � s � �G�Nsq| �N� t � � �s{�¤|z � v � tXv � � � �4| � |wys{�2±G�Nsqv �K¥N� �ªt �y�q���q� |zNs � x{z¤|z � �1=�717 | u4t � w����w��ªt �y��� �Ns � x{z¤|z � |�¨ � �9wyx{z4|P�Nsq|�NsqvI� �q��� u�� � �q� wy| � � �$|$v � } | �X� � � w�| � �X�y��� Þ £ � sqv�w�|#�9wyx{z4|#w�� } ������� |z ��� s ��� s@¨�w��NxGsqt � v � |wys{�X��¯

�)3�(83��1=�717 3 q1q � �`42( (�'�7t( �,+�7 � 3 ��79*713 * -1- 3 q1s �*=)7*7 3� =)3 �`� ' -1- �1=�717 3 q*s �1=)7*7 3 q1s �*=)717 3� 71919 -1- �1=�717 3 q*s 39*7 * ( y = � >�')( -1- �1=�717 3 q*s �1=)7*7 3� 4 ( 7�3 * -1- �1=�717 3 q*s �)<1<19

� �ªs �X���y� � � t�t1sqv|w��Nx�|zXw���w���¯��<��!��9,7��1=�717 � � � ~ �1=�717 y 9*713 * y � =83 �`� ' y � 7�919 y

9*7 * ( y = � >�')( y � 4 ( 713 * � � '�7�=)7�)3�(83��1=�717 3 �)( 7�3 * 3����1=83 �`� ' ~ �*=)717 3 � ~ �*=)7*7 3 �9*713 * �)( 7�3 *� =)3 �`� ' � �1=83 �`� '� 71919 ~ ( 713 * 3 � � 39*7 * ( ~ �1=)3 ��� ' 9t= � � 9= � >�')( ~ �1=)3 ��� ' 9t= � � =� 4 ( 7�3 * ~ ( 7�3 * � � � �1=��87� 4 ( 7�3 * � ��� 319)4�7

Page 57: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� � ��� � �� �� �J� �!�:� ���� # ï

'�sq| � w��`|z ���K¥ t1sqv| � w��$|g|z � |*|z � | u4t � � � � � �1=)7*7�� t�t ��� vI� �q� s{� ��¢ wd± � ±�¨�wy|z�s � |¬wy|� } s{���$|$v � } |$sqvI�C¦C± £ z � �( 713 * � � � �*=83 �`� '¤� v � ��sq| �K¥ t1sqv| ������� � � |z � s{� � u§¨ � ub|$s �X� w ��� sqv�| � �q��� t � v|]|$v ��� �Ps � |�Iw �N� s � |z ��ªs �����y� w�� � u � �Iw��NxG|z � ° � vCwys � � ¢e� � �$|$v � } |C¦*sqt � v � |wys{����±!¼ � } s � vI� �q� |z �P�q� ° � ��| � x � s � |z�w���w�� � sqvI� � |wys{�z�w � w��NxÀw���|z � | � | �&��� | � v�|w�� � ¨ � } s ����� Ô K,ÙqÎ4Ü4ã]|z � v � t�v � � � �4| � |wys{�¾| u4t � ¨�wy|zNs � | � H � } |w��Nx � � � vI��s �|z � | u4t � ±

1�1 0 � � 47<>G ��G � ��<>GLI

��� v � w�� ��� vIw ��� s@° � v°,w � ¨½s � �$s{� � sq|z � v � �$t � } |�js � |z � �ªs �����y� �$u>�$| � �í±¬È ��� |z � v � t1sqv| � sqv/�ªsqv �S��� | � w � ��±

� � � � �)+�<�=1(½�N� } ��� v � |wys{� � � u�� ���y� } |w�° ��� u�z�w ���&� ��|w�|w � � � �w��Nx � ' � � � � > } ���q� � � w��~|z � w��ªt1sqv|��� } ��� v � |wys{�2± £ z�w���w�� � � ���e���/� sqv �K¥ t � w } wy| � u �K¥ } ����� w��NxU� � � � ��|z � | � v �À� � ���¾� sqvGsq|z � vGt � vt1s{� � �¨�wy|zNs � |#z � °,w��Nxª|$s � � � ê ���q� w�ì � vI� � sqv�sq|z � v�w��9t�sqvI| ��� � � � � � � vs{��|z � �9s ���X�y� ±

� � � � �)+�<�=1( � � u } s{��| � w�� � � 3)4 } ���q� � � |$s¤�t � } w � u �¤� wGH � v � �4|�ê ���q� w�ì � v�|z � �[|z � � � � � s � |z �w��ªt1sqv|w��Nx9�ªs ������� ± £ z�w�� } � � �1�]� � ��� |$sÀ�zNsqvI| � �Uê ���q� wyì � vI� � vs{� �9s ���X�y� �#¨�w�|z � s{�Nx©� � � � ��sqv|$s ��� �w � u �q��� t�|�|$s � } z � �Nx � w��í�ªs �����y� � � � � ¨�wy|zNs � | } z � �Nx{w��Nx �q��� ê �X�q� wyì � vI��±

� � vsqxqv � �9�*w��ªt � w } wy| � u�w��ªt1sqv|g|z � **=)719 � �17 �ªs �����y� ± � � �K¥ t � w } wy|¬w��ªt1sqv|gs � |z ��� v ��������� s\° � vvIw �N� �|z � w��ªt � w } wy|!w��ªt1sqv|Ss ���q���l� v �����X�N� � � � � ��± £ z � � �� �)+8<,=1(#*1=)719 � ��7n' � � � � > 9,7 � >*(,'

¨�w ��� �Nsq|�w��ªt1sqv| 9,7 � >*(,'©� vs{��|z � È>| � � ��� v �&� v ���������q���q��� s\¨�w��NxG|z � � � � � 9,7 � >,(,' |$s ���P��� ìX� ���� wGH � v � ��| � uq±

�   ���$| � � } �*�N� } ��� v � |wys{��� � v � ��sq| �K¥ t � w } wy| � uT� � � ��� w���w��ªt1sqv|�sqv �K¥ t�sqvI| � w��|��± h/° � vIu]�ªs �����y�g�K¥ t1sqv|��q��� s � w�|�#w����$| � � } �P�N� } ��� v � |wys{�X� � � �À� ° � vu&w��9t�sqvI| � vCw��Nx{� �q��� w��X�$| � � } �P�N� } ��� v � |wys{���#w��4|$s9� } sqt � ±

� r ��� ��í� � |zNs � �í� � u �1� � � � ��� � w�|z � v&w��×|z � � � ��� � vís ����� | � } s{�X�$|$v � } |$sqvI� � w�� t � v � ��|z � � � �� s ��� s@¨�w��NxG|z � } ��� ��#� � � �q� sqv � ��sqv � w�� � vu�° � vIw � �X�y� ��±

�T� |zNs � x{z �T� � �q�����ÖÌ ���ªs ������� �$u>�$| � � w���v ����� |wy° ��� u } s{��� � v° � |wy° �q� |z � v �ª� v � � � ��uUv ���y� � } s{� } � vC��w��Nx©|z �w��ªt1sqv| � � �é�K¥ t1sqv|�s � ° �q���N� ��±ÀÆ&s{�|]s � |z � � �`� v � s � °>wys � � ��� sqv�w����$| � � } �q� wy|]w��]w ���y� x �q� |$sLw��ªt1sqv|�|ɨ*s� wGH � v � �4| � �4|wy|w � �cz � °,w��Nx�|z � � � � � � � � � w���|$s©|z � � � � � � } sqt � ±�¼T|z � vTv ���y� � � v � ��sq|c�s©s � °>wys � � ��� sqv�K¥N� �ªt �y�q�N� sqv � x{wy° � �&|Éu,t ��� � � } ��� �� � |z � v � } � ���Nsq| ��� �ªsqv � |z � �ís{� � � � 46(83 �`� 7ª�N� } ��� v � |w�s{� � sqv�|z � |} s{� � w�� � |wys{�¾s � | u4t �`� � � } ��� �� � �4u,¨�z � v � w��¤|z � t�vsqxqv � �í± £ z � v ���q�N� v��z�s ����� v ���q� |z � ¿ � t1sqv| � sqv�N� | � w � � ¢�@ #{¦C±

²K UXWZYª»I´�� ��»$µ���MPO�OcS

£ z�w����zNsqv|]� � } |wys{�éx{w�° �`� �[w���| � w�|wy° �9�N� � } vIw�t�|wys{�¤s ���&�7� ¨ } s{�9�9s{�¾t�vs ��y� �9��|z � |��Ns\°>w } � �]v � �¾w��4|$s� �w��Nx ��� � �q�����ÖÌ ��|Éu,t � �$u>�$| � �í±

Page 58: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

# î ��� ����;!"�R� �;!� ��������

1L/+0�1 � G �'� � 4 � � � 35476T8�:;4�<�=V?BA�I :

� ��u ��� �Nx ��� x �À� �w���xL|z �í� w�� ���y� u4Ä ÆUw � � � vP| u4t � �$u>�$| � � z � ��¨�z � |ªw�� } �q���y��� Ú�ã�Ï�� �Ñ Ó>ÎÒlB>Ñ Ú áMÝ9Ñ Ð�BLK�Õ=âCÝ ��1� } �q� � � w �N� �4|wyì � vI�]�Nsq| � s � � �¾� �w���x � 9*7,( sqv � '87,=)7 } ���q� � �¤¢ sqv � |�|z � |$sqt ��� ° ��� s �#� �ªs �����y� ¦ � v �� w��`wy| ��� ¨�wy|z]v � �$t � } |�|$s�|z � wyvjt�s � u,�ªsqvItXz�w���&±   ��t � v|w } ����� v �q� Ú ÙqÝ �IÒ{Ù � �Ñ Ó>ÎÒ �e� � } |wys{� ¢ wÖ± � ± � s{� � t � �I� ���� � � vx � � � �4|T|$s � �Nsq|z � v �e� � } |w�s{�¦ } � ����sq| �1� w����$| � �4|w � | ��� w��&| ¨!s � wGH � v � �4|�¨ � u>��±c�Nsqv �K¥>� �9t �y�q� |z�w��t�vsqxqv � � w��#w ���y� x �q� ¯9*7�( * > � ~ > w }�y > m 3 m � q1q � 9*9 q (��,+87 �t7 p +�=)78414 � < �� � * ~ o�p)q*s,p��

�1� } �q� � �V>�l� s � � � |$s �&��� � �2���í� � �$|$v � } |wys{�¾¨�z�s{� � t�vIw�� } wyt �q� |Éu,t � w�� 3 q*s 3>� w�� � � ��� ¨�wy|zXw�� *§w��b|ɨ*s� wGH � v � �4|�¨ � u,��¯/s{� } � ¨�w�|zí|Éu,t � w 3 }�q1s w 3 } ��� � � s{� } � ¨�wy|zÀ| u4t �Z��'�3�= q*s �I'�3�= ±

1L/+0 / ���B:;G�<�A�C �7G�<�624 �BA ���

  |#w�� ��� �$u©|$s � sqvx � | � |#|w�� � �S|z � |#� � � � v �q� � � v � Ñ f ãKÐBÚ Ñ�Ù�Ò�ãÒ � � � � ÎÑqÏ!Õ=Ý�BÚ ÕÖÔ�ÕeÏeÚ áÀÔIÑ\ã�ÐÅÔBãÒ]|$sª|z � ° � vCwys � �� � � � vIw } |Éu,t � � �l� �Pw��§� � ��u§sq|z � v ��� �Nx �X� x � ��±9Æ&sqv � x � � � v �q� � � � � vIw } �K¥ t�v � ��w�s{���c�$s{� � |w�� � � } � �X�Nsq|�1� ê � wy| � �$sªx � � � vIw } ± � } s{�`�ªs{�L� � � � vIw } | u4tw��Nx � vvsqv�w����$s{� � |z�w��Nx � w �q� |z ��� s ��� s@¨�w��NxN¯3 ��7,=83�>�7 p 4 � 4�� � p 4N/ 9,7 � >,(,' p 4 q*q ��=)< � >��

~ / � v � ê � wyv � � � v � } |wys{� �q��� vIx � � � �4|� �S�X� | 9*7 � >,(,'Ì �ªv � � ��� |9w�� � �r��� ( ± £ z � |Éu,t � �9w��� � | } z~� � �$| �1�} sqvv � } | ��� ¨�wy|z � � �K¥ t � w } wy| } s � v } w�s{�2¯3 ��7,=83�>�7 -1- ~ � =83 � ( � < � 319 3 � � s w 3 }rq1s 33 ��7,=83�>�7 p 4 � 4�� � p 4N/ * =)< � ��� ()7*>,=83*9 ~ 9,7 � >*(,' p 4 �

1L/+0 � D ?�G � 4 �B47:;4�<>=@?BA2I : � GLI � <�A�C�� A24 �

£ z �c�T� � �q����� |Éu,t � �$u>�$| � � } s{�4| � w���� � v � �$|$vIw } |wys{�©v ����� | ��� |$sG|Éu,t � } ��� �� � �S|z � |�w��!��sq| � s � � � w���sqv � w�� � vu� w�� ���y� u4Ä ÆUw � � � v�|Éu,t � �$u>�$| � �9��¯í|z � ݪÑqÎÑ Ý9Ñ Ð�BLK�Õ=âCÝ Ð$ãKâBÏeÐBÕeÔ\ÏeÕeÑqÎ�± £ z � v ��� �$s{� � sqv9|z�w��ªv � �$|$vIw } |wys{�½w��v ����� | ��� |$s � � �N� | �y� |Éu,t �P� � � wyx � wy|Éu � � � w�� �K¥ t ��� w�� ��� w�� �7�X���1�N� | � w � w��À|z � ¿ � t1sqv| ¢�@ ÂN± #,± #{¦C± � �w��ªt �y� v�K¥ t ��� � � |wys{� � s ��� s@¨���¯

£ z � �ªs{�Ns{�ªsqvItXz�w��� v � �$|$vIw } |w�s{�&� � u>��|z � | � �4u&w �N� �4|wyì � v � s � � �í� u � t � |$| � vI� � w�� � w��Nx ¢ ¨�z�w } zUw��>Ä} ������� � � w�� � w��Nx{��|$s � �Iw��Nx �y� w �N� �4|wyì � vK¦ � � � � z � °>w��Nx��Ns �K¥ t � w } wy|�| u4t � �w�x{� � | � v �q� � � �$| �1� Ý9Ñ ÎÑ Ý9Ñ Ð�BLK�ÕÖÔ�±� ��w ��� ��|wyì � v¬w��¬�9s{�Ns{�ªsqvtXzXw } w � w�� � w�|z � v!�Nsq|!s\° � v � s �q�N���2� sqv*w��/s\° � v � s �q�N���©�X� |¬w�� � � ��� w�� � |*�ªs{�$|*s{� ��$t � } wyì } s@° � v � s �q� w���x � � � w�����sq| �K¥ t1sqv| ��� ±

� wys ��� |wys{�X��s � |z�w���v � �|$vIw } |wys{�Gv � � ��� |jw�� � �$| � |w } |Éu,t ��� vvsqv�± £ z � �w��9t �y� �$|�¨ � u�|$s � °qs{w � |z � tXvs �X�y� �w���|$sLt�vs\°>w �N�9� � �K¥ t � w } wy|c|Éu,t � �wyx{� � | � v � ± '�sq| � |z � |ÀÙ Î�áª|Éu,t � �wyx{� � | � v � ¨�w ����� s ¢e� � � s{��x&wy|Pw���| u4t �} sqvv � } |C¦C±

� } s{�9�ªs{�9°,wys ��� |wys{�ªs � |z � v � �$|$vCw } |wys{�ªz � t�t � ���j¨�wy|z �7� � } |wys{��� �N� ì� ��� w�� � z�w�x{z � v$Ädsqv �N� v/� � ��� � v �� ��w��À|z�w�� �N� ìX�Xwy|wys{�©s �4 � �í� vs{��|z � È>| � � ��� v �&� v ��������� ¯4�� � � * <19���9 ~ u�� (

Page 59: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

# �

� �#w�� � |z�w��S¨!s ����� } �q� � �]� �| � |w } |Éu,t �P� vvsqv\±gò � } � �íì ¥ |z � tXvs �X�y� � � u �q�X� w��NxG|z � | u4t � �w�x{� � | � v � ¯4�� � -1- ~� � � 3 � � s w 3 }rq1s 3

�T� �$s9�Nsq| � |z � |#|z�w��St�vIs �X�y� � ¨*s ����� �Nsq|�z � ° �]� vIw�� � �&w � ¨ � z �q� ¨#vIwy|$| � ��¯4�� � p 4 � * <19���9 ~ u�� ( p 4

�1� } �q� � � |z � v � �$|$vIw } |w�s{�Às{� � u � t�t � w � �*|$s9t � |$| � vI� � w�� � w��Nx{��±

² �­¶2¶ M�WZS

  �N���q��� u � � vv � u,��w�� ���7� � } |wys{� �q�4��� �Nx ��� x � ¨!s �����P�1� v � x � v ����� �w��ªt � u � � �e� � } |w�s{��� � vs{� w�� � w } � �2|$s�° �q���N� � ��X� |�t�v � x{� � |w } �q��� u � w��ísqv �N� v�|$s � �� � v �P� J } w � �4| � }�} � ���|$s � vv � u ���y� � � ��|� � ¨ � � ����� |$s �1� � � v � ¨ � } � �| � �q���q� ° � �4| � x � s � |z � �t � } w �q� t�vsqt � v|w � �cs � |z �9� s{� � w�����s � |z � � �9�7� � } |wys{��� � ¨�z�w } z � v � w��$s{�9sqvtXz�w }|$sbìX��w�| � } s{�4|wyx � s � �ª� �N� � � |�Gs � |z � w��4| � x � vI��± �T� � �q�����Ö� |z � v ��� sqv �q�*� s � �ª�Nsq|ª|$v ��� | � vv � u>� � �ªx � � � v �q��e� � } |wys{���S¨�wy|z � � � t�t � w } � |wys{�Àsqt � v � |wys{� �N�� | � � � � �$|$v � } | ��� | � | u4t � ��¨�wy|z � � �N� � } vIwyt�|*sqt � v � |wys{�2±

£ ¨*sÀ� � w�� � tXt�vs � } z � ��|$s �e� � } |wys{� �q��� vv � u,�T� � u ����� w�� } � vC� ��� ¯TÕ=ÎÔ�Ð$ã�Ý`ãKÎXÏdÙ Ú � � � ݪÑqÎÑ Ú Õ7Ï K�ÕÖÔ �N��� Äw���w�|wys{�2±   �&|z � w�� } v � � � ��| �q� } � � �q� ¨ � z � ° �G���e� � } |wys{�L|z � |�tXvs �X� } � � � � � �ªt�| u � vv � u&s �¬� x{wy° � �§�w&% �� � �¾� ��sq|z � vP|z � |P| � �q� � � � � vv � u �j� �éw�� ���K¥���� � �é� ° �q���N�q� t�vs ��� } w��Nx � � � ¨ � vv � uU|z � | � wGH � vI� � vs{�|z � s ��� s{� � s{� � u � |S|z � x{wy° � �íw�� �N�K¥ ±¬¼ � °,wys � � � u �>� � � wy° � w��ªt �y� � � ��| � |wys{�©s � � � } z � � � vv � uÀ� � � � �4|w } �¨*s �����9�1� w���|$s �y� v � �X� uGw�� � J } w � �4| ��� w�|z � v!v � ê � w�vIw��Nx � � � ¨ } sqt,uªs ��� � � vIv � u � sqv ��� } zÀw�� } v � � � �4| �q� v ���N� ìNÄ��wy|w�s{� � sqv*| � � w���x � w�� ��� v/|w�� ��� sqv � vv � u � s4s �>� t ñ |z � � � � � vCwys � � � |$| � �9t�|� � | � �Iw��Nx�|z�w�� � t�t�vs � } z � �9t � s\u�$sqtXzXw��$|w } � | ��� �$| � |w } � � �q� u>�w�� � � � } �y� ° � v!v � �>Äd|w�� �*�N� °>w } � �j|$s � °qs{w �ª�K¥ } � ��wy° � } sqt4u>w��NxN± £ z � �ªs{��s � wy|z�w }� t�t�vIs � } z � s{�Ë|z � sq|z � v9z � � ��� } s{�X�$|$v � } |� � � � vv � u �q���*� |�s{� } �q� ¨�wy|zNs � |�v ���7� v � � } � |$s§w���| � vI� ��� w � | �� vv � u&° �q���N� ��± ��� |z�s � x{z �T� � �q����� z � � � �Uw�� } v � � � �4| �q��� vIv � u � t �X� | � sqt � v � |$sqv � |z � � � w��&|z�v � �$|�s � |z �� vv � u �7� } w � wy|Éu©w��#�ªs{�Ns � wy|z�w } ±

� vv � u,� � v � ��sq|gt � v|js � |z � È>| � � ��� v �G� v �������N�A� |z � �$| � � ��� v �ª� w � v � vu } s{�4| � w����j|z �#� vv � u�sqt � v � |$sqvI��±� ��uÀ�ªs �����y��� �w��Nx � vv � u>��� � �$|#w��ªt1sqv|S|z � � =1=83 � �ªs �X���y� ±

1 �+0�1 �'� ��G � �$8�=HGLI

£ z � � p � w � v � vIu �N� ìX� � � � |Éu,t � } ��� ��#s �j� vv � uÀw�� � w } � ��¯� 9*38414 ~�, = �r3 � � s � p 3 � '�7�=)7=83 � >�7 -1- ~ 3 y 3 �nq*s w 3 }� � �17 p -1- ~ 3 y 3 � 3 q1s ��� (� � " 3 � >�7 -1- ~ 3 y 3 �nq*s 3 q*s �)<*<�9

  ���$| � � } �S�N� } ��� v � |w�s{��� � v � t�vIs\°>w �N���P� sqv���� (� ��� ()7*>17,=����I'�3�=X� �)<*<�9>�q� � � | � t �y� �ls � � p |Éu,t � � � t�|$s �y� �Nxq|z# ñ w�� �q��� w�|wys{� � w����$| � � } � ��� � u �1�c�q� |$s{� � |w } �q��� u �N� vIw�° ����� sqv � � � � � v � | ���&� � � | � t �y� | u4t � ��±gò � v � x � v �|z � t�vCw��9wy|wy° � |Éu,t � � � ��° � } |$sqv�w�� � w } � � �>� � � | � t ��� � � ��w�� � w } � �!s � � ��� |w � w�� � �X�wys{� �q� v � } | � �Nx ����� v � vv � u>��±'�sq| � |z � |�|z � ì�vI�| � vx � � � ��|�s �#��� } z^s � |z � sqt � v � |w�s{���]s � } ��� ���� p w�� � t � wyv�s � w�� � w } � � ñ |z � � �í� v �|Éu,tXw } �q��� uÀ|z � �IÑ Ó>ÎÒMâ ¢ ì�vI�$| � � �L��� �$|�w�� � w } � �C¦*s �/� � � vv � uq±��Nsqv �K¥N� �ªt ���q� |z ��� s � � � ��s �/�U� �MÄ ���y� � � �4| �% � vs ÄdsqvIw�x{w��©° � } |$sqv�¨�wy|z ��� ( w�� � w } � �!¨!s �X���`�1� ~ ( y:;�� � ¨�z�w �y�T�©� �� � u � �� � ÄdsqvIw�x{w��À� � |$vIw ¥ �`wyx{z�|�z � ° �|z ��� s � � � � ~1~ vzy�v*� y ~ v ( ( y�v (.( �1� ± ¢   �[� � ��u¤sq|z � v ��� �Nx ��� x � � � � � } z � s � � � ��¨*s �����b�1� ¨�vIwy|$| � �éw�� �

Page 60: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

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

� sqvI� � w �q� v - v ( ( y v - v ( (N�1�X� |T|z � t�v � � � ��| � sqvI� ì�|�T|z � |Éu,t � �$u>�$| � � �1� |$| � v � �w�� } ����� } z � s � � � w���s �|z � � � � � |Éu,t �]� � � x � � � v �q� w�� ���K¥ ± ¦

£ z �i=83 � >17 sqt � v � |wys{�U| � �q� � ��� s � � � ��t � w�v � � � t�vs ��� } � ��|z ��� w��$|#s � w�� � w } � � � u,w���x �1� |ɨ ��� �U|z�s{� �� s � � � � � w��íw�� �N�K¥ sqv �N� v�±¬�Nsqv �K¥>� �9t �y�q�

=)3 � >�7 ~ ( y0��� % w ( y�vzyc{�yc|�y0�*}

=83 � >�7 ~*~ ( y ( �zy ~ v yC{8�1� % w2~ ( y ( �zy ~ ( y�v,� y ~ ( yC{8� y ~ vzy ( � y ~ vzy�v*�zy ~ v yC{��6}£ z � � � " 3 � >�7 t�v ��� w } � | �G��� | � vI�9w�� � �c¨�z � |z � v � �bw�� �N�K¥§� w � � �1� |ɨ ��� � � x{wy° � �¤t � wyvcs �*� s � � � ��± ¢ ��sqv �| � t ��� | u4t �q� |z�w��j| � �$|/w��jt � v � sqvI� ��� } s{�ªt1s{� � ��|ÅÄd¨�w�� � ± ¦��jw�� �q��� u � |z � � � �17 p sqt � v � |wys{� �q��� s\¨�� � t � vI|w } ����� v���y� � � �4|�s �� � � vv � u�|$s �1�S�q��� v � �I� ��� ¯�x{wy° � � ��� s � � � �lt � wyv � � ��� �Gw��NÄdv � �Nx � w�� �N�K¥1� |z � sqt � v � |wys{��u>w ����� �|z � % � vIs ÄdsqvIwyx{w��ísqv � w�� �q� s � |z � w�� ���K¥ ¨�wy|zXw��©|z � v � �Nx �qñ�� sqv �K¥N� �ªt �y� ¯

� � ��7 p ~ v y:;�� { % v

� � �17 p ~*~ ( y ( �zy ~ v yC{8�1� ~ vzy�v*� % �

1 �+0 / � <>< -8 ��<>G �>A24 �

�T� � �q�����ÖÌ �ª�ªs{��s � wy|z�w } � vv � u } v ��� |w�s{� �7� � } |wys{� � sqvI�`� � � � vv � u � vs{� � t � wyvGs ��� s � � � � � � �^�b� w��$|�s �w�� ���K¥ Äd° �q���N� t � wyvC� ¢e� �éÙMâIâ�Ñ�Ô�ÕÖÙqÏeÕÖÑ Î¾Ú Õ�âKÏ�¦C¯3�=*=83 � -1- ~�� p 3 � � s ~ 3 y 3 �nq*s wI~ 3 y � �2} q*s�� =1=)3 �r3 �

��� v �q��� sqv �K¥>� �9t �y�q� w�� �`�N� ìX��wy|w�s{��s �j� � � vIv � u©s � |z � �ê ��� v � ��s � � � � �1� vI� � vs{� � |$s � ��>¯4 6 ��3�=�7�4 � 3�=*=83 � ~ v y�v (.( � w2~ � y � � � � � � 21q w v :1: v (.( }1}

£ z�w�� � vv � u �K¥ t�v � ��Iwys{�Uw���| u4tXw } �q� w�� � �w��Nx �©� w��$| } s{�ªt�v � z � ���wys{� � sqvc|z �G� ��$s } w � |wys{� � w��| ñ w�� �e� } | � |z�w��� � � x � v � � ��� |��w�� � vv � u �K¥ t�v � ��Iwys{����� � } z � w �q� |z � Ù ÐBÐ$Ù áÀÔCÑ Ý�BÐã�K>ã�ÎNâCÕÖÑ ÎNâ�s � |z �]��� �Nx ��� x �   � Á � Ãd±

� vv � uU� �N� � } vIwyt�|w��Nx9w���t � v � sqvI� ��� ¨�w�|z&|z � w��Nì ¥ sqt � v � |$sqv �I�2� � � |z ��� s � � � �#s �¬� � � vv � u } � � �1��K¥ |$v � } | ��� ¨�wy|zÀ|z ���e� � } |wys{��� < � � ��4 ¯

4 6 ��3�=�7�4 � 7 % ��;

� < � � ��4 4 6 ��3�=�7�4 % ~ vzy�v ( ( �ò � �9w�x{z�|Sx � � � v �q� w&% � |z�w�� �K¥N� �ªt �y�c� u`t � v � � � | � vIw&%�w��NxG|z ��� s � � � � � � � |z ���7� � } |wys{�©|$s �1�c� tXt � w ��� |$s��� } z§w�� ���K¥ ¯

�85 � =1=)3 � -1- ~�� p 3 � � s ~ 3 q1s � �Nq1s ~ 3 y 3 �nq1s � =1=83 � 3 ��85 � =1=)3 � *N�*� ��4 � 3�=*=83 � �1� ��4 wI~ � y * � � � � 2*q =83 � >�7 �1� ��4 }

£ z � � � ¨ � } s �����&��� ìX� �R4 6 ��3�=)784�� � �85 � =*=83 � ~ o � q*s � � � � ~ v y�v ( ( � ±Æ � ��u � vIv � u>� � v ���N� ì� ��� v � } � vC�wy° ��� u ñ |z � |*w�� � ¨�wy|zª|z � ° �q���N� �/s � �$s{� �����y� � � �4|� �N� t � � � w��Nxcs{��|z �

° �q���N� ��s � sq|z � vI��± ��� v �q�X� sqv �K¥N� �ªt ���q� ¨ � z � ° �]�9�7� � } |wys{�Àv � | � vI�Xw��Nx � � � vv � uÀs � �jw � s{� � }�} w�� � � �1� vI��¯* � � 4 -*- ��� ( q1s � =*=83 � ��� ( ��� (* � � 4 � � 3 � '�7,=�7 3 � 3�=1=)3 � ~ ( y � � ~�wI~ ( ygv*�zy ~ vzy v*�2} u*u

wI~ � y 3 � ~ � q*{��gu 3 � ~ � q�v,�1� � � 2*q w { :*: � }1}��

Page 61: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ����� � � �+� � ��!�9� �'� � �

� �Nsq|z � v �K¥>� �ªt �y� s � � � } z � v � } � vIv � � } � w��]|z � Î � u½Î � Ù f ãEDBÐÅÑ ÎÏ*� � |$vIw ¥1� w��é¨�z�w } z ���y� � � �4|��s � |z �ì�vI�|�vs@¨ � � � ì�vI�$| } s ��� �`� �q��� z � ° � |z � ° �q���N���¾� � � sq|z � v ���y� � � ��|� � v � � � �9��s � |z � wyv�� � w�x{z � sqvI��|$s|z � ¨ � �$| � ��sqv|z�¨ � �$| �X� � � �Nsqv|z2¯

� 3��)7 * =)< � ( -1- ��� ( q*s � =1=)3 � ~���� ( y ��� ( � ��� (� 3��)7 * =)< � ( � � 3 � '87,=)7

3 � 3�=1=83 � ~1~ vzy�v*� y ~"� y � �*�~�wI~*~ v y � �zy v,� � � 2*q w v :1: � }1} u*uw2~1~ � y�v,� y v,� � � 2*q w { :1: � }1} u*uw2~1~ � y � � y 3 � ~ � y � q�v*�gu 3 � ~ � q�vzy � q�v,�gu 3 � ~ � q�vzy � �*�

� � 2*q w { :1: � }�y � 2*q w { :*: � }1}��£ z � ¨ � ° ��� vs{�4|!� � |$vIw ¥ w��j�$s } �q���y���G�1� } �q� � � w�� � t � v �q���y��� w��ªt ��� � � ��| � |w�s{� � |z � v � } � vIv � � } �#� w } | � | � �/|z � ||z � } s{�ªt � | � |wys{� } � � �1� x{w���¨�wy|z�|z � ìXvI�$|�vs\¨ � � � } s ��� �9�Gw���t � v �q���y���>� � � t�vs } �����9� � � ¨ ��� x � ÄÉ�z � t ���¨ � ° �q� |$v � ° ��� w��Nx � vs{� �NsqvI|z�¨ � �$|�|$s§�$s � |z ��� �$|�±   |�w���w��ªt1sqv| � ��|]|$s§�Nsq| �q� z�s\¨ � ° � v � |z � |G�NsLsqv �N� v�s �} s{�ªt � | � |wys{�&w��#�t � } w�ì ���©� uÀ|z �P� ��s } w � |w�s{� � w��$|�±

  � ��� } z§s � s � v �K¥>� �ªt �y� ���$s �e� v � ¨ � z � ° � x{wy° � � �`� �Xw�ê ���]� ��$s } w � |wys{� � sqv ��� } z¤w�� �N�K¥ s � |z ��� vIv � u� � � s{� � u � sqv�|z � w�� � w } � ��¨�wy|z�w��¤|z ��� s � � � �cs � |z �©� vv � u �/� � � w�� �N�����2� ¨ � � � �$| � sL|z�w��]w��bx � � � v �q�� sqv � � � vv � u ���c�e����� u �N� ìX� ��� ± � � � ��$s } w � |wys{�&¨�wy|z � �ís � |ÅÄds � Ä � s � � � ��w�� �N�K¥ v � � ��� |��w�� � � � vvsqv ñ w ��� �w�� ���K¥ w��S�9w���w��NxPsqv � t�t ��� vI�S�ªsqv � |z � �©s{� } �q� z�s\¨ � ° � v � |z � v � w��S�NsGw��9� ��� w � | ��� vIvsqv �>�X� |*|z � ° �q���N� s �|z �P� vv � u � |#|z � |�w�� �N�K¥ w��S|z � � � � �N� ìX� ����� �$s`|z � |#� �N� � } vIwyt�|w���x]|z �P� vv � u©¨�wy|zí� � } z � �íw�� ���K¥ u>w ����� �� � � vvIsqv�±

1 �+0 � �EC-C �V: �B6 �>A24 �

ò � } � �©v �����M¥ |z � v � �$|$vIw } |wys{�`|z � | � �©w�� �N�K¥`� tXt ��� v � |S�ªs{�$|*s{� } � w��9|z �c� ��$s } w � |wys{� � w��| � u9�$t � } w � u>w��NxzNs@¨ |$s } s{� � w�� � � �X� |wyt �y� ° �q���N� � � �I�$s } w � | ��� ¨�w�|z � �w���x �y� w�� �N�K¥1ñ |z � v � � ��� |#w�� } �q���y���&� �ËÙ{ÔIÔ�Ó>Ý�Ó>ÚyÙqÏÉãÒÙ ÐBÐÅÙqáM¯3 �*� � � � =*=83 �j-1- ~�� p 3 � q*s ~"� q1s � q*s � � q1s � q*s ~ 3 y 3 �nq*s w � 414�< � 3 � }rq*s � =1=)3 �r3 �

£ z � ìXvI�$| � vx � � � ��|#s �;3 �*� � � � =*=83 � w��S|z � Ù{ÔCÔ�Ó>ÝGÓ>Ú ÙqÏeÕ7Î4Ü�DBÓ>ÎÔ�ÏeÕÖÑ Î � |z � � � } s{� � w�� � �Lw��Xwy|w �q� ° �q�����`¢ |z �� � � ��� sqv ��� } z ����� � � ��|Ts � |z ��� vv � uN¦ �2� � � |z � v � � � w���w���x � vx � � � �4|� � v ��� s � � � � � � �§� � � �I�$s } w � |wys{�� w��| �,� �S¨�w�|z�|z ��3�=1=)3 �9�e� � } |wys{�2± £ u4tw } �q��� u � |z ��� }�} � � ����� |w��Nx �e� � } |wys{�Àw��\~ u�� �N� � � |z � w���wy|w �q� ° �q���N�q�% � vs ñ1� sqv �K¥N� �ªt �y�q� |z�w�� �7� � } |wys{�&| � �q� � � t � wyv�s �g� s � � � � � � �U�©� w��$|�s � ° �q����� � ¢ s �¬� �§w�� ���K¥ | u4t � ¦ � � �u>w ����� � � z�w��$|$sqxqv � � ñ |z � |�w�� �N� | � �X��� s � |z � � � � �1� v�s � s }�} � vIv � � } � ��s �j��� } zL° �q���N� ¨�wy|z�w���|z �P� s � � � ��¯' � 42( -1- ~�� p 3 y ��� (�7*>,=8319 � � � s ~ 3 y 3 �nq*s w 3 }rq*s�� =1=)3 �r3 �' � 42( �1� ��4 � 4 � 3 �1� � � � =1=)3 � ~ u�� ( �*� ��4 w2~ � ygv*� � � 21q � 4 y � � " 3 � >�7 �1� ��4 � }

È � tXt�s{� � ¨ � z � ° �À� } s ���y� } |w�s{�és � � ��� � � v � � � �4|��s{�é|z � w��4| � v° �q� ÁyÙ � �M¦ �g� � � ¨ � ¨ � �4|G|$s � w�°,w ��� |z �w��4| � v° �q� w��4|$s �N� } �q�N� � � � � } s � ��|�|z � � � � �1� v�s � � ��� � � v � � � �4|��¨�wy|z�w�� ��� } z2¯

��7 � 3��17�4 -1- ~1" 71319 � =83 � 3 � � s 3 q1s 3 q1s w 3 }rq1s � =1=)3 � ��� ( ��� (��7 � 3��17�4 3 � � ' � 46( ~ ( y8;�� : ��3I+ �17 � 3 ��7

� '�7�=)7 �17 � 3 ��7 p � * 9*<1<�= ~1~ prq 3 � �r4 �4 � v ( / ~ � q 3 �

Page 62: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ç � � ����������

1 �+0 � �'�BC�<>GL:;G�� � 6 �B= � � GLI

  � �q�X� wy|wys{��|$s�|z � �ªs{�Ns � wy|z�w } � vv � u } v ��� |wys{� �e� � } |w�s{��� �{�T� � �q�����N�q� �$s�z � � � �ªw�� } v � � � �4| �q�>� vv � u � t ��� | ��e� � } |wys{� � ¨#vIw�|$| � � � �S|z � w��Nì ¥ sqt � v � |$sqv /1/�ñ |z � �w��ªt ��� �$| } � � �q�� � � vv � u 3 ¨�wy|z ���y� � � �4| � � t ��� | ��� |$s��� w��*¨#vIwy|$| � � 3 /1/ w2~ � y � �2} ± £ z � v ��� �$s{� � sqv�|z � �ê ��� v �c� v � } �q� |��w��S|z � |�|z �c����� | � vx � � � ��|Ss � ~ /1/ �w�� � � � ��$s } w � |wys{� � w��$| �N� � ���q��� u } s{��| � w���w��Nx � tXvsqt � v#� �N� � � |�s � |z � w�� � w } � �*s � |z �P� vv � u¯~ /*/ � -1- ~�� p 3 � � s � =*=83 � 3 � q1s wI~ 3 y � �2} q1s�� =*=83 � 3 �

� �#¨�wy|zÀ|z � 3�=1=83 ���7� � } |wys{� � |z � w�� � w } � ��w��À|z ��� ��$s } w � |wys{� � w��$|�� � �| �1�P� ��w�ê �N�T� sqv�|z � ° �q���N� ��|$s �1��N� ìX� ��� ±g�Nsqv �K¥N� �ªt ���q� z � v � w�� �G�e� � } |w�s{�À|$s`w��4| � v } z � ��x � |ɨ*s9vs@¨��#s �j� � � |$vCw ¥ ¯4 � 3I+ " < � 4 -1- ~�� p 3 y � p � y � � � � � � � s 3 q1s 3 q*s�� =1=)3 � ~ 3 y � � � q1s � =1=)3 � ~ 3 y � � �4 � 3I+ " < � 4 � � m 3 � 3 /*/ ~�wI~*~ � y � �zy 3 � ~ � m y � �*� � � 21q w ��( < :1: � � � }1}Nu1u

w2~1~ � m y � � y 3 � ~ � y � �1� � � 21q w ��( < :1: � � � }1}��� '�7�=)7 ~*~ � ( < y ��( < � y ~ � � � y � � � �1� �t� < � � ��4 3

£ z � } s{� } � | � � � |w�s{� z � v � s � | ¨!s~� � t � v � | �¾� w��$| } s{�ªt�v � z � ���wys{����s\° � vL|z � � � � �b� w��$|�s � �½w�� � w } � �©w�� �zNs@¨ � ° � v �4� � � wyx{z4|�w�� � J } w � � } u ñ w�| Ì � � w �q� ¨�vIwy|w��Nx�|ɨ*s � s4sqtX��¨�z � v � s{� � ¨�w ����� scw�� � �Gw��9t � v � |wy° �!��� ��x ��� x � ±' � ° � v �7��� v � ¨ � } � �&t � v � sqvI� |z ��� ê � wy° �q�y� �4|�s �j�ª� s4sqt �e� �w�s{��sqtX|w��9w&% � |wys{�Lw�� ��� � �q����� ¯4 � 3I+ " < � 4 � � m 3 � 3 /*/ w 384*4�< � � � 21q w � ( <�:1: � � � }�y

384*4�< � 21q wI~*~ � y � � y 3 � ~ � m y � �*� y~*~ � m y � � y 3 � ~ � y � �1�2} }

� '�7�=)7 ~*~ � ( < y ��( < � y ~ � � � y � � � �1� �t� < � � ��4 3

1 �+0 � � � G � :;=V62G�� � � <�A � � �B6��>A2=V62A�C � A24 �

ò � } s{�9t �y� | � s � v¬w��4|$vs �X� } |wys{�G|$s �T� � �q������ vv � u,�¬¨�wy|zª|z ���7� �9w � w � v �K¥N� �ªt �y� s � � � |$vIw ¥ � ��� |w�t � w } � |wys{� �| � � w��Nx �q� ° � �4| � x � s � s@° � v � s �q� w��NxÀ|$s ��� ìX� �G���e� wyv � u©x � � � v �q�j�7� � } |wys{�2±PÈ>w�� } � s{� � u&� ��� |w�t � w } � |wys{� � � ��q��� w�|wys{�9s{��|z �T���y� � � �4|!| u4t � s � |z � � � |$vIw } � �Sw��¬w���°qs � ° ����� ¨ � x � | ���7� � } |wys{�9|z � |S� ��� |w�t � w � �g� � |$vCw } � �s �S� ��u¤� � � � vIw } |Éu,t �9� � �y� �I��¨ � |$vu¤z � v � �Nsq|�|$sN± �T��� w�|wys{� �q��� u � w � ¨ �9� v � } � v ���7�X� |$s � t�t � uUs{� � u ~ � �� � � |z � sqt � v � |w�s{���Ts � � p |$s&w�� � w } � � � ¨ � x � |Px � � � vIw } w�|ÉuLs@° � v�w�� �N�K¥ |Éu,t � � �l� � � w�� �e� } | � |z �ª� s � v�vs@¨� � � } s ��� �9�Àw�� �N�K¥ | u4t � ��� ����� �Nsq| �q���1�1� |z � � � � � ±¬�Nsqv��Iw��ªt � w } wy|Éu � zNs\¨ � ° � v � ¨ � v � ê � wyv � |z � |�|z ���y��� |} s ��� �`�`w�� � w } � � � � � vIwyx{z4|¬vs@¨ w�� � w } � � ��� s � |z � � � � � |Éu,t �q�>� � � �ªsqv � s@° � v � |z � |*|z ��� s � � � � �1��� ê ���q� ¯

�`3�( � ��9�( -1- ~�� p 3 y � p � y � p � y � � � � � s� =1=)3 � ~ 3 y � � � q1s � =1=83 � ~"� y � � � q1s�� =*=83 � ~ 3 y � � �

�`3�( � ��9�( p � � 3�=1=)3 � =�7�4���9�( �)< � � ��4w2~1~ � y � � y 4 � � w p � ~ � y 5 � � � � ~ 5 y � � �V5 21q =83 � >�7 ~ 9 � y � � �2}��

� � 2*q =83 � >�7 ~ 9 � y � � � y� 2*q =83 � >�7 ~ 9 ��m y � �;m �X}

� '�7�=)7 ~*~ 9 � y 9 � � y ~ � � y � � �*� � � < � � ��4 p~*~ 9 � m y 9 �;m � y ~ � � m y � �;m �1� � � < � � ��4��=�7�4���9�( �)< � � ��4� ~ 9 � y � � � � ��~ 9 � m y � � m � � ~*~ 9 � y 9 �;m � y ~ � � y � ��m �*��l<,(�'�7�= � � 4�7 � 7,=*=)<,= � �`3�( � ��9�(�- � �`� < �)+�3�( � � 9,7 � < � � ��4 �

Page 63: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

� ����� � � � � � � � ����� �!�� ]� � � � ���9� ��� ��� �!�9� �'� � ë

� � � � � �w ���q� ¨ � } � � �q� �$s �N� ì� � �`3�( � ��9�(í� �w��Nx 3 �1� � � � =1=)3 ��� v � � ��� |w��Nx`w�� � t�v � � � �4| � |wys{�U|z � |��ªsqv �} � s{� ��� u�v � � � � �X��� ��|z �P� � �X�q�1� sqvI� ����� |w�s{�íw�� � �Lw��9t � v � |wy° ����� �Nx ��� x � ¯

�`3�( � ��9�( p � � 3 �1� � � � =1=)3 � ~ u�� (t=�7�4���9�( �)< � � ��4w2~1~ � y � � ylp � ~ � y 5 � � � � ~ 5 y � �*�

� � 21q =)3 � >17 ~ 9 � y � � �zy� 21q =)3 � >17 ~ 9 �;m y � ��m �5 21q =)3 � >17 ~ 9 � y � � � }

� '�7�=)7 ~*~ 9 � y 9 � � y ~ � � y � � �*� � � < � � ��4 p~*~ 9 � m y 9 �;m � y ~ � � m y � �;m �1� � � < � � ��4��=�7�4���9�( �)< � � ��4� ~ 9 � y � � � � ��~ 9 � m y � � m � � ~*~ 9 � y 9 �;m � y ~ � � y � ��m �*��l<,(�'�7�= � � 4�7 � 7,=*=)<,= � �`3�( � ��9�(�- � �`� < �)+�3�( � � 9,7 � < � � ��4 �

ò � } � �¤x � � � v �q� w&% ���e� v|z � v � uL� � � w��Nx�|z ���e� � } |w�s{�Uz�w�x{z � v$Ädsqv �N� v � �w��ªt � u©v � t ��� } w��Nx 4�� �¤� � � ~ � �� u �e� � } |wys{� �q� t � v � � � | � vI��¯>�7 � � 3�( � ��9�( -1- ~�� p 3 y � p � y � p � � � s

~�w�* }rq1s > � q*s ~ � q*s 7 q*s * � q*s� =1=)3 � ~ 3 y � � � q1s � =1=83 � ~"� y � � 7 q1s�� =*=83 � ~ 3 y � � >

>�7 � � 3�( � ��9�( 4�� � m 42()3�= p � �3�=1=)3 � =�7�4���9�( �)< � � ��4

w2~1~ � y � � y 4 � � m w p � ~ � y 5 � � 42()3�= � � � ~ 5 y � � �[5 2*q =83 � >�7 ~ 9 � y � � �2}��� � 21q =83 � >17 ~ 9 � y � � � y� 21q =83 � >17 ~ 9 ��m y � �;m �X}

� '�7�=)7 ~*~ 9 � y 9 � � y ~ � � y � � �*� � � < � � ��4 p~*~ 9 � m y 9 �;m � y ~ � � m y � �;m �1� � � < � � ��4��=�7�4���9�( �)< � � ��4� ~ 9 � y � � � � ��~ 9 � m y � � m � � ~*~ 9 � y 9 �;m � y ~ � � y � ��m �*��l<,(�'�7�= � � 4�7 � 7,=*=)<,= � �`3�( � ��9�(�- � �`� < �)+�3�( � � 9,7 � < � � ��4 �

�T� Ç �e� ����¨�w ��� v � } sqx{��w&% � |z �]� � ���e��� � � ��*s ���e� � } |wys{�X� � w �q� |z ��� s ��� s@¨�w��NxN¯>�7 � � 3�( � ��9�( �`3 p � � � � ~ q��>�7 � � 3�( � ��9�( 3 � � ~]� � �

ò wy|zÀ|z � ì�vI�$|Ss � |z � � �q� |z ��� vx � � � ��|� � v � � � � � vIw } � � |$vIw } � � ��� � � |z �9¢ Õ � �,¦ÅÄd|z ���y� � � �4|�s � |z � v � � ��� |w��*|z � � �M¥ w�� � � � wGH � v � � } �c�1� |ɨ ��� � } sqvv � �t�s{� � w��Nx ���y� � � �4|�Ss � |z � ÕÉÄd|zívs\¨ � � � �qÄd|z } s ��� �9�©s � |z �w��Nt � |��±   �¾|z � � � } s{� � } � � �q� |z �`� vx � � � ��|� � v � � � |$vCw } � �]s ��� �4u � ê �X�q� wy|Éu¤| u4t �q�j� � � |z � v � � ��� |Pw�� �Ê s4s ����� �í� � |$vIw ¥ w���¨�z�w } z ���y� � � �4| ¢ Õ � �,¦*w�� �*=���7 w ��� � � s{� � u9w � |z � ÕdÄd|zÀvs@¨×s � |z � ì�vI�$| � vx � � � �4| � � ��qÄd|z } s ��� �9�ís � |z � � � } s{� �&� v �P� ê ���q��� ��° � } |$sqvC��±

'�sq|w } � |z � |�|z ������� � � ��|�|Éu,t � �]s ��>17 � � 3�( � ��9�( � ����� ��sq| �1� |z � � � � �q�g�X� |�� � v ��� u � t�t�vIsqt�vIw � | �� sqv�|z ���e� � } |wys{�ét � v � � � | � v 42(83�= ±Uò � } s ����� x � � � v �q� w&% � �|w ���/�e� v|z � v � u � vsqt�tw��Nx&|z � v � ê � wyv � � � ��||z � |�|z � ì�vI�$| } s ��� �`�§w�� �N�K¥§� � � � � } s{� � vs@¨�w�� ���K¥ |Éu,t � � �1� |z � � � � �qñ } �y��� v � u � |ɨ*sL� � |$vIw } � � } s ������1� } s{���w ��� v ��� } s{� � sqvI� � �X�y�9� � � s{�Nx � �]|z �`�y� �Nxq|zX�cs � |z � } s ��� �9�X�cs � |z � ì�vI�$| � � � |z � vs@¨���s � |z �� � } s{� �b� v �ª� ê ���q� ± £ z � v ���q�N� vP� � u§¨�w��zU|$s �N� vIwy° � |z�w��c�$|w ��� �9sqv � x � � � v �q� ° � vI�Iwys{�2± ¢�� � "$��� �T� � |z �� � ��7 p sqt � v � |wys{�í|$s ��� | � vI�9w�� � |z ���y� �Nxq|z���± ¦

Page 64: A Gentle Introduction to Haskell 98 Paul Hudak Yale University

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

² � U _RQ � Q Pµ ��µ�M ��Q

�ð��� vx � } s ���y� } |wys{�Ls �/��� � �q����� v � �s � v } � ��w�� � ° � w ��� ��y� s{�&|z � ¨ ���U� | '�384�587�9*9�: <,=�> ± ��� v � uqs � ¨�w ��� ìX� �} s{�ªtXw �y� vI� �1�N� �ªs{� � t � t � vC� ��� � � � � } z¤° �q���X� �X�y� w�� � sqvC� � |wys{� � � s � | �T� � �q�����g� � �§�e� � } |wys{� �q� t�vIsqxqv � �GÄ�9w���xN± ��� � �q����� } s{�ªtw �y� vI�csqv�w���| � vIt�v � | � vI��v � �bs{� �q� �9s{�$| �q��� z � v � ¨ � v �`� � � sqt � v � |w��Nx&�$u>�$| � �9��± £ z ��T� x{�#�$u>�$| � � w�� � sq|zL�� �q���2� � � t�sqvI| � �X�y� �©wy|#w�� � � �K¥ } ������� ��|#° � zXw } �y��� sqv �y��� vI��w��Nx ��� � �q����� ±

² � �­º ��´G·�� OcQ/¸ ��Q�� Q¬´cµ�S

£ z � � � �ª|$s ��� |$vCw } w � � � � ����� � � Æ � v � Æ � � � | � |©Ç�s{� ����� �9s{� �*� � � '�w } � r � vvIw � vs � r�z � v �y� ��rSs{��� ���Ö�� �9wyv � w��zNs{� � È � � � v � Çls4s{� � �9sqv �q� Æ � v|w�� ¼ �N� vI� � u �#� � � Þ � °>w � ¿�s } z �1� vx � | � �q�y� �T��wy° � vC�wy|Éu � sqv|z � wyv©ê � w } � v ���q� w��Nx{�9s ����� v � w � v � v � � |��s � |z�w���� � � � � } vIwytX|�± È>t � } w �q� |z � � � �9|$s h/vCw � Æ � w ®$� v � sqv©z�w���K¥ | � ���wy° � } s{�`� � ��|��s{�í|z � � � ¨ � � | � vIw �q�l�q���N���À� sqv�° � vI�w�s{� � ±èÂ`s � |z�w���| � |$sqvCw �q� ±

� Q ��Q¬¶ Q¬´Gº�Q;S

Á � Ã�¿]± Ê w�v � ±�ÍCÎXÏeÐ$Ñ�Ò Ó�Ô\ÏeÕeÑ ÎUÏdÑ Ø Ó>ÎÔ�ÏeÕÖÑ ÎÙ Ú>ÛSÐ$ÑÜqÐ$Ù ÝGÝGÕ=Î4Ü9Ó,âCÕ7Î4Ü å Ù âIæqã�Ú=Ú ± � v � ��|w } �#���q���d� ' � ¨ �/sqv ������q�qî ±Áèç@à � ± Þ � °>w � ±2ÍCÎÏeÐÅÑ�ÒqÓNÔ\ÏeÕeÑqÎLÏdÑ Ø Ó>ÎÔ�ÏeÕÖÑ ÎÙqÚ,ÛSÐ$ÑÜqÐ$Ù ÝGÝGÕ=Î,ܪà�áMâBÏÉã�Ý ä�âCÕ7Î4Ü å Ù âIæqã�Ú=Ú ±�r � � � vIw � x � ����w�° � vI�wy| u

� v � �� �l���q� ç,±Áèë@à � ± �T����� � ±!r*s{� } � t�|w�s{� �>� °qs ��� |wys{� ��� � �&� t�t � w } � |wys{�©s ���e� � } |w�s{� �q� t�vsqxqv � �9�`w��Nx ��� �Nx ��� x � ��±!ß � �

� Ñ Ý�BÓNÏeÕ7Î4ÜÀà�Ó>Ð f ã�á@â � ç �{¢ ë{¦C¯ ë�# � �� �q� �¬���qîq� ±Á  ÃGÈ>w��ªs{� ��� u4|$s{� � s{� � � ¢7��� w�|$sqvB¦C±#¿ � t1sqv|#s{�U|z �]� vsqxqv � �9�`w��Nx`Ç � �Nx ��� x �G��� � �q�������qî,�1� '�s{�>ÄÉ�|$vIw } |

�!� v ��� u§� � � } |wys{� �q� Ç � �Nx ��� x � ±��XÙ Ú�ã¾ä�Î�Õ f ã�ÐIâBÕ7Ïeá � � ã B>Ù ÐKÏeÝ9ã�ÎXÏ�Ñ"D � Ñ Ý�BÓNÏÉãKÐ�àÔ�ÕdãKÎ�ÔCã � ãIÔ K��#ã B>Ñ ÐKÏ�4ß ���ªä � � à��� � � � ����� � � ���Ë���q�q� ±

Á$#@ÃGÈ>w��ªs{� ��� u,|$s{� � s{� � � ¢7��� wy|$sqvK¦ £ z ���T� � �q�����j�qî Çlw � v � vuí¿ � t1sqv|�±��XÙ Ú�ã¤ä�Î�Õ f ãKÐCâCÕeÏeá � � ã�BNÙ ÐBÏeÝ`ã�ÎXÏ�Ñ"D� Ñ Ý�BÓNÏÉã�Ð]àÔ�ÕÖã�ÎÔCã � ãÔ K���ã�B>Ñ ÐKÏ��4ß ���ªä � � à��� � � � ����� � � ���[���q�q� ±

Á � Ã�¿]± È�±7'Tw � zXw � ±   ��¢ ° � vI�wys{� � �>±���¦�v ���7� v � � } � � � � ���q� ± £�� } z��Xw } �q� v � t1sqv| � Æ � �I� � } z � � � |$|�   ���$|wy| � | � s �£�� } z���s � sqxqu � Ç � � sqv � |$sqvu � sqvTrSs{�ªt � | � vTÈ } w � � } �q� È � t�| � � �1� v ���q� �>±

Á ï à � ±X¿ ��� � � � � ò�±1r � w��Nx � v ¢7��� ��± ¦C± £ z � v � °,w�� ��� �Tv � t1sqv|�s{�&|z ���q� xqsqvIwy|z��`w } ��� �Nx ��� x � È } z � � � ±�à,Í ó �Û �lß����]ÑqÏeÕÖÔCãKâ � ç �{¢Å� ç{¦C¯ ë ï � ï �,� Þ � } � � �1� v ���qî � ±

Á î à � ± Ǭ±�È,| �����y��� v�± � Ñ ÝGÝ9Ñ Î �gÕ�â�B�� � K>ã ��ÙqÎ4ÜqÓ�Ù�Ü,ãK±¬Þcwyx{wy| �q�l� v � �� ��Ê*� v � w��Nxq|$s{� � Æ � ���± �����qî ÂN±Á � à � ±Sò �q���y� v�± � s\¨ |$s^v � t ��� } �U�e� w ��� v �&� u �Ë� w��$|`s � � � }�} � �� � ��±   � ÛSÐ$Ñ�ÔCãCãÒ Õ7Î4Üqâ¾Ñ0D � Ñ Î�D�ãKÐãKÎ�ÔCã¾ÑqÎ

Ø Ó,Î�Ô�ÏeÕÖÑ ÎÙ Ú!Û�ÐÅÑÜ{ÐÅÙqÝ�ÝGÕ7Î4Ü ��Ù Î,ÜqÓ�Ù�Ü4ãKâÀÙ Î�Ò � Ñ Ý�BÓNÏÉãKÐ`ßTÐ$Ô K4Õ7ÏÉãIÔ�ÏeÓ>Ð$ã � ��� � à���Ñ Ú���� � � � t � x � � �q� ë �� ç î ±2È,t�vIw���x � v � � v ��� x �����qî #,±

Á � �Mà � ±Sò �q���y� v\± ÆLs{� �q� � � sqvÀ� � � } |wys{� �q��� vsqxqv � �9�`w��Nx   � ß�Ò f Ù ÎÔCãIÒ Ø Ó>ÎÔ�ÏeÕÖÑ ÎÙ Ú�Û�ÐÅÑÜ{ÐÅÙqÝ�ÝGÕ7Î4Ü �È,tXvIw��Nx � v � � v ��� x � Ç7'�r#È � ç�# �����q� #,±