如何使用视图模式语法编写此case表达式?

伦乔伊

阅读完“了解Haskell带来的好处!”中的RPN计算器示例之后,我想用更一般的方式自己重写它。

为了轻松扩展可用功能,我将这些功能放在单独的列表中,并lookup使用ViewPatterns语法将其与该功能匹配的模式为了阅读输入,read我这样写:

parse xs x = case readMaybe x of
  Just x  -> Right (x : xs)
  Nothing -> Left "Syntax error

但我宁愿避免使用case表达式,而再次使用如下所示的视图模式:

parse xs (readMaybe -> Just x ) = Right (x : xs)
parse xs (readMaybe -> Nothing) = Left "Syntax error"

但是与后者我得到这个错误: No instance for (Read a0) arising from a use of ‘readMaybe’

我不明白为什么。他们不是等效的吗?

整个代码在这里

猪工

它们不相等。case版本有一个readMaybe,视图模式版本有两个。对于每个readMaybe,编译器必须推断哪种类型是尝试读取的目标。当代码说

parse xs x = case readMaybe x of
  Just x  -> Right (x : xs)
  Nothing -> Left "Syntax error

GHC侦探注意到,在您的Just x情况下,x最终被许可为xs,因此必须采用所拥有元素的任何类型xs那是很好的工作。

但是当你写

parse xs (readMaybe -> Just x ) = Right (x : xs)
parse xs (readMaybe -> Nothing) = Left "Syntax error"

您将创建两个单独的find-the-target-type问题,每次使用都会产生一个问题readMaybe第一个问题的解决方法与第case一种情况相同,但第二个问题的解决方法是单独阅读,

parse xs (readMaybe -> Nothing) = Left "Syntax error"

还有就是不知道是什么这是你无法阅读,没有理由相信这是同样的事情在上面的线。

通常,除非只有一个令人感兴趣的结果,否则使用视图模式是不合适的。如果您想一次进行中间计算,但它们的语法是错误的,但是将结果分析为多种情况。出于这个原因,我很高兴继续记录下来,认为我的功能不当。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用表达式树编写此嵌套查询?

来自分类Dev

如何使用LinQ lambda表达式编写此查询

来自分类Dev

如何使用正则表达式匹配此模式

来自分类Dev

如何编写此Java正则表达式?

来自分类Dev

如何使用 cout 在 C++ 中编写此表达式?

来自分类Dev

如何编写此正则表达式以与 preg_match 一起使用?

来自分类Dev

如何使用一致的语法重写此LINQ表达式?

来自分类Dev

使用多个条件编写正则表达式模式

来自分类Dev

正确的语法此lambda表达式

来自分类Dev

如何修改此正则表达式以使用此模式提取字符串?

来自分类Dev

更正此CASE表达式?

来自分类Dev

如何使用 continue 或 break 表达式编写多行宏

来自分类Dev

如何使用表达式树编写 List All 方法?

来自分类Dev

如何使用pyparsing验证布尔表达式语法?

来自分类Dev

如何使用此正则表达式更具体?

来自分类Dev

如何使用正则表达式更改此值?

来自分类Dev

将语法转换为正则表达式时如何编写“或”运算

来自分类Dev

如何编写语法正确的MySQL表达式,生成运行时错误?

来自分类Dev

将语法转换为正则表达式时如何编写“或”运算

来自分类Dev

如何在R中编写正则表达式语法

来自分类Dev

如何编写语法正确的MySQL表达式,生成运行时错误?

来自分类Dev

SAS Perl正则表达式:如何编写正确的语法?

来自分类Dev

使用正则表达式在SML中编写语法规则

来自分类Dev

如何用ruby编写此正则表达式?(解析Gmail API字段)

来自分类Dev

我该如何编写此正则表达式来匹配这些术语?

来自分类Dev

如何在ColdFusion中编写此正则表达式?

来自分类Dev

如何编写此正则表达式而不会造成灾难性的回溯

来自分类Dev

如何用命名组在Python中编写正则表达式以匹配此规则?

来自分类Dev

如何编写此正则表达式以仅替换 url

Related 相关文章

  1. 1

    如何使用表达式树编写此嵌套查询?

  2. 2

    如何使用LinQ lambda表达式编写此查询

  3. 3

    如何使用正则表达式匹配此模式

  4. 4

    如何编写此Java正则表达式?

  5. 5

    如何使用 cout 在 C++ 中编写此表达式?

  6. 6

    如何编写此正则表达式以与 preg_match 一起使用?

  7. 7

    如何使用一致的语法重写此LINQ表达式?

  8. 8

    使用多个条件编写正则表达式模式

  9. 9

    正确的语法此lambda表达式

  10. 10

    如何修改此正则表达式以使用此模式提取字符串?

  11. 11

    更正此CASE表达式?

  12. 12

    如何使用 continue 或 break 表达式编写多行宏

  13. 13

    如何使用表达式树编写 List All 方法?

  14. 14

    如何使用pyparsing验证布尔表达式语法?

  15. 15

    如何使用此正则表达式更具体?

  16. 16

    如何使用正则表达式更改此值?

  17. 17

    将语法转换为正则表达式时如何编写“或”运算

  18. 18

    如何编写语法正确的MySQL表达式,生成运行时错误?

  19. 19

    将语法转换为正则表达式时如何编写“或”运算

  20. 20

    如何在R中编写正则表达式语法

  21. 21

    如何编写语法正确的MySQL表达式,生成运行时错误?

  22. 22

    SAS Perl正则表达式:如何编写正确的语法?

  23. 23

    使用正则表达式在SML中编写语法规则

  24. 24

    如何用ruby编写此正则表达式?(解析Gmail API字段)

  25. 25

    我该如何编写此正则表达式来匹配这些术语?

  26. 26

    如何在ColdFusion中编写此正则表达式?

  27. 27

    如何编写此正则表达式而不会造成灾难性的回溯

  28. 28

    如何用命名组在Python中编写正则表达式以匹配此规则?

  29. 29

    如何编写此正则表达式以仅替换 url

热门标签

归档