I have a question on pattern matching:
Is it possible to somehow match a (string ++ [char] ++ anotherstring)?
I have tried something like:
f
No it is not possible. There are many functions in split which you can use to accomplish what you are trying to do.
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"
You can do this kind of pattern matching similar to the way proposed here:
Haskell pattern matching conundrum
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.