在chars上的模式匹配

时间:2013-10-07 20:35:50

标签: frp elm

我对榆树(elm-server 0.9.2)很新,我遇到了一个问题,这对我来说已经成了一个障碍。

这是我的问题:

根据version-0.9文档,我应该写一下:

stripCommas str =
  case str of
    ',' :: rest -> stripCommas rest
    c   :: rest ->  c  :: stripCommas rest

所以为了测试这个我基本上做了我自己的功能(非常相似:) :):

stripNewLine str = 
  case str of
   '\n' :: rest -> stripNewLine rest
    c   :: rest ->  c  :: stripNewLine rest

但他们的摊位失败了,经过一些调试我在javascript中注意到了这一点:

var stripNewLine = function(str){
    return function(){
      switch (str.ctor) {
        case '::':
          switch (str._0) {
            case Chr '\n':
              return stripNewLine(str._1);
          }
          return _L.Cons(str._0,stripNewLine(str._1));
      }_E.Case($moduleName,'between lines 22 and 33')}();};

我对javascript知之甚少,但似乎Chr'\ n'应该是Chr('\ n'),强硬我可能是错的...有人能指出我在正确的方向这里因为我失去了...

1 个答案:

答案 0 :(得分:3)

这是一个榆树病毒 - 自最新稳定版本以来已经修复 - 你是对的,它是关于错误生成的Javascript。

此外,您在该公告博客帖子中复制的示例代码中也存在逻辑问题,即它正在执行非详尽的模式匹配。

字符串是字符列表(即String只是[Char]),因此正确的模式匹配应处理空列表情况,即:

stripCommas str =
  case str of
    []          -> str
    ',' :: rest -> stripCommas rest
    c   :: rest ->  c  :: stripCommas rest

main = asText <| stripCommas "1,2,3,4,5"

您可以测试此here(从版本选项中选择“master / HEAD”,这是比具有JS生成错误的当前版本更高的版本)。