Haskell pattern matching char in a string

前端 未结 4 1265
甜味超标
甜味超标 2021-01-13 18:08

I have a question on pattern matching:

Is it possible to somehow match a (string ++ [char] ++ anotherstring)?

I have tried something like:

f          


        
相关标签:
4条回答
  • 2021-01-13 18:47

    No it is not possible. There are many functions in split which you can use to accomplish what you are trying to do.

    0 讨论(0)
  • 2021-01-13 18:48

    No, it's not possible. Pattern matching deconstructs values according to the constructors they were built with, so you can only use constructor applications in pattern matching to describe which values match the pattern and which don't.

    For something like your example, a case works well,

    f str = case break (== ';') str of
              (s, _:r) -> s ++ r
              _        -> error "No semicolon found"
    
    0 讨论(0)
  • 2021-01-13 18:50

    You can do this kind of pattern matching similar to the way proposed here:

    Haskell pattern matching conundrum

    0 讨论(0)
  • 2021-01-13 18:56

    For completeness' sake, one could make gratuitous use of GHC's ViewPatterns extension, and rewrite Daniel Fischer's example as something like:

    {-# LANGUAGE ViewPatterns #-}
    
    f (break (== ';') -> (s, _:r)) = s ++ r
    f _ = error "No semicolon found"
    

    This is of course a purely cosmetic change, but if you prefer the usual "group of equations" syntax instead of case expressions, there it is.

    N.B. -- I don't have GHC at hand right now so I haven't actually tested the above.

    0 讨论(0)
提交回复
热议问题