--|类型类和重载的示例--2016年功能编程课程。--托马斯·哈格伦模块过载,其中导入ExhaustiveTesting----------------------------------------------------------------------------------*定义您自己的Eq实例data TrafficLight=红|黄|绿派生(Show、Enum、Bounded)例如Eq TrafficLight,其中红色==红色=真黄色==黄色=真绿色==绿色=真_==_=错误----------------------------------------------------------------------------------*编写自己的Show实例--|每张卡片都有一套♠ ♥ ♦ ♣data套装=黑桃|红桃|钻石|梅花派生(等式、枚举、有界)实例Show Suit whereshow黑桃=“今年显示红心=红色++““++正常显示钻石=红色++““++正常show Clubs=“--| ANSI颜色转义序列红色=“\ESC[31m”normal=“\ESC[m”--|卡片有等级:2、3。。10、J、Q、K、Adata排名=数字Int | Jack | Queen | King | Ace推导(等式、命令)all_ranks=[数字n|n<-[2..10]]++[杰克、女王、国王、王牌]排名::排名->排名->Bool秩差r1 r2=r1>r2实例显示排名,其中show(数字n)=show nshow Jack=“J”show Queen=“Q”show King=“K”show Ace=“A”数据卡=卡{rank::rank,suit::suit}推导公式卡片节拍::卡片->卡片->BoolcardBeats(卡片r1 s1)(卡片r2 s2)=s1==s2&&rankBeats r1 r2实例Show Card,其中show(Card r s)=显示r++显示sexample_card_1=纸牌王俱乐部example_card_2=卡片{rank=王牌,套装=黑桃}--|一手牌包含零张或多张牌数据手=空|添加卡片手实例Show Hand whereshow Empty=“。”show(添加c h)=显示c++“”++显示hexample_hand_0=空example_hand_1=添加example_card_1为空example_hand_2=添加example_card_2 example_ hand_1example_hand_3=添加(卡片(数字5)红心)example_hand_2----------------------------------------------------------------------------------*可以进行详尽测试的小实例和属性示例instance Small Suit其中values=enumAll实例小排名,其中值=all_ranksinstance小型卡,其中值=[卡r s | s<-值,r<-值]prop_Ace c=not(c`cardBeats`Card Ace黑桃)prop_Face c1 c2=(isFace c1&&isNumeric c2&&suit c1==套装c2)==>(c1`cardBeats`c2)isFace c=等级c>=杰克isNumeric c=等级c答案=6*7