Todo列表和图代数
{-# 语言 重载字符串#-} 进口 数据。 字符串 进口 代数。 图表 进口 代数。 图表。 Util公司 实例 ( IsString(IsString) 一 , 订单 一 ) => IsString(Is字符串) ( 托多 一 ) 哪里 来自字符串 = 顶点 . 来自字符串 购物 :: 托多 字符串 购物 = “礼物”
购物 :: 托多 字符串 购物 = “礼物” + “外套” + “围巾”
待办事项 :: 订单 一 => 托多 一 -> 也许 吧 [ 一 ]
λ> todo购物 只是 [ “外套” , “礼物” , “围巾” ] λ> 待办事项 $ “外套” + “围巾” + “礼物” 只是 [ “外套” , “礼物” , “围巾” ] λ> 购物 == “外套” + “围巾” + “礼物” 真的
假日 :: 托多 字符串 假日 = 购物* “打包” * “旅行” λ> 今日假期 只是 [ “外套” , “礼物” , “围巾” , “打包” , “旅行” ] λ> 购物 == 假日 False(错误) λ> 购物 `是SubgraphOf` 假日 真的
λ> 待办事项 $ 假日 + “围巾” * “外套” 只是 [ “礼物” , “围巾” , “外套” , “打包” , “旅行” ]
λ> 待办事项 $ 假日 + “旅行” * “礼物” 没有什么
购物 :: 托多 字符串 购物 = “礼物” + “外套” + “电话妻子” * “围巾” 假日 :: 托多 字符串 假日 = 购物* “打包” * “旅行” + “围巾” * “外套”
λ> 今日假期 只是 [ “电话妻子” , “礼物” , “围巾” , “外套” , “打包” , “旅行” ]
--降低给定待办事项列表中项目的优先级 低的 :: 托多 一 -> 托多 一 购物 :: 托多 字符串 购物 = “礼物” + “外套” + 低的 “电话妻子” * “围巾” λ> todo假期 只是 [ “礼物” , “电话妻子” , “围巾” , “外套” , “打包” , “旅行” ]
--把论点尽可能地集中在一起 ( ~ * ~ ) :: 订单 一 => 托多 一 -> 托多 一 -> 托多 一 --尽可能地排除参数 ( > * < ) :: 订单 一 => 托多 一 -> 托多 一 -> 托多 一 购物 :: 托多 字符串 购物 = “礼物” + “外套” + “电话妻子” ~ * ~ “围巾”
在生成系统中构造命令行
命令行1 :: 托多 字符串 命令行1 = “gcc” * ( “-c” ~ * ~ “源代码.c” + “-o” ~ * ~ “src.o” ) λ> 待办事项命令行1 只是 [ “gcc” , “-c” , “src.c” , “-o” , “src.o” ]
命令行2 :: 托多 字符串 命令行2 = “gcc” * ( “-o” ~ * ~ “src.o” + “-c” ~ * ~ “源代码.c” ) λ> 命令行1 == 命令行2 真的 λ> 待办事项cmdLine2 只是 [ “gcc” , “-c” , “源代码.c” , “-o” , “src.o” ]
命令行3 :: 托多 字符串 命令行3 = “gcc” * ( “-c” * “源代码.c” + “-o” * “src.o” ) λ> 命令行1 == 命令行3 False(错误) λ> 待办事项命令行3 只是 [ “gcc” , “-o” , “-c” , “源代码.c” , “src.o” ]
优化 :: 国际 -> 托多 字符串 -> 托多 字符串 优化水平 = (*标志) 哪里 旗帜 = 顶点 $ “-O” ++ 显示 水平 λ> 待办事项 $ 优化 2 命令行1 只是 [ “gcc” , “-c” , “源代码.c” , “-o” , “src.o” , “-O2” ]
发动机罩下面
新类型 相邻地图 一 = 调幅 {相邻地图 :: 地图 一个( 设置 a) } 衍生 ( 等式 , 显示 ) 实例 订单 一 => 图表 ( 相邻地图 一 ) 哪里 类型 顶点 ( 相邻地图 a) = 一 空的 = 调幅 $ 地图 . 空的 顶点x = 调幅 $ 地图 . 单粒子x 设置 . 空的 覆盖x y = 调幅 $ 地图 . 与联合 设置 . 联盟 (相邻地图x)(相邻地图y) 连接x y = 调幅 $ 地图 . unions与 设置 . 联盟 [相邻地图x , 相邻地图y , 来自集合( 常量 . 关键帧集 $ 相邻地图y) (按键设置 $ 相邻地图x)] 邻接列表 :: 相邻地图 一 -> [( 一 , [ 一 ])] 邻接列表 = 地图 ( 功能性维修计划 设置 . 到AscList) . 地图 . 到AscList . 相邻地图 λ> 邻接列表 $ 集团[ 1 .. 4 ] [( 1 , [ 2 , 三 , 4 ]) , ( 2 , [ 三 , 4 ]) , ( 三 , [ 4 ]) , ( 4 , [] )]
新类型 排名靠前的排序 一 = TS公司 {从顶部排序 :: 相邻地图 一个} 衍生 ( 显示 , 号码 ) 实例 订单 一 => 等式 ( 排名靠前的排序 一 ) 哪里 x个 == 年 = 顶部排序x == top排序y
λ> 路径[ 1 .. 4 ] == (集团[ 1 .. 4 ] :: 排名靠前的排序 国际 ) 真的 λ> top排序 $ 集团[ 1 .. 4 ] 只是 [ 1 , 2 , 三 , 4 ] λ> top排序 $ 路径[ 1 .. 4 ] 只是 [ 1 , 2 , 三 , 4 ] λ> top排序 $ 转置 $ 集团[ 1 .. 4 ] 只是 [ 4 , 三 , 2 , 1 ] λ> top排序 $ 电路[ 1 .. 4 ] 没有什么