string - Haskell 字符串/输出操作
问题描述
我确实有以下代码:
suffixes :: [a] -> [[a]]
suffixes [] = [[]]
suffixes l@(_:t) = l : suffixes t
prefixes :: [a] -> [[a]]
prefixes [] = [[]]
prefixes l@x = l : prefixes (init x)
menu :: Char -> [a] -> Either String [[a]]
menu 'p' l = Right (prefixes l)
menu 's' l = Right (suffixes l)
menu x _ = Left ("(" ++ show x ++ ")" ++ "is not supported, use (p)refix or (s)uffix")
我确实有以下测试功能:
testMenuP = "Expected Right [[1,2],[1],[]]; menu 'p' [1,2] returned " ++ show (menu 'p' [1,2] :: Either String [[Int]])
testMenuS = "Expected Right [[1,2],[2],[]]; menu 's' [1,2] returned " ++ show (menu 's' [1,2] :: Either String [[Int]])
testMenuC = "Expected Left \"(d) is not supported, use (p)refix or (s)uffix\"; menu 'd' [1,2] returned " ++ show (menu 'd' [1,2] :: Either String [[Int]])
testMenu = putStr (testMenuP ++ "\n" ++ testMenuS ++ "\n" ++ testMenuC ++ "\n")
我现在的问题是,如何在输出字符串时去掉 Char 'd' 中的引号 ''(如测试函数 testMenuC 所示)。
解决方案
您可以将菜单部分替换为:
menu x _ = Left ("(" ++ [x] ++ ")" ++ "is not supported, use (p)refix or (s)uffix")
甚至
menu x _ = Left . mconcat $ ["(", [x], ")", "is not supported, use (p)refix or (s)uffix"]
推荐阅读
- java - 无法在 JPopupMenu 中执行 JMenuItem 操作而不会抛出 java.lang.ClassCastException
- android - 如何完成应用程序并返回上一屏幕
- javascript - React:如何在不改变状态的情况下根据属性过滤状态?
- arrays - 219. Contains Duplicate II - 为什么使用二分查找的解决方案适用于未排序的数组?
- php - 如何在php mysql的单个页面中多次调用存储过程
- c++ - 编写单元测试和使用 for 循环时的最佳方法?
- python - 如何检查python函数是否使用while循环?
- reactjs - 如何将按钮添加到 react-date-range
- python - 基于元数据列出 azure blob - python sdk
- python-3.x - 具有不同进程的多个 tqdm 进度条