I think it's quite misleading to list Haskell in the title: the only common thing between Loop and Haskell that I've found is pattern matching, and that's not even exclusive to Haskell -- other languages have it. Besides, it's not clear from the intro that Loop's pattern matching is as powerful as Haskell's (especially with all the extensions). Finally, pattern matching is really a syntactic sugar over the case/switc…
Pattern-matching is not sugar over "case". Pattern-matching means that the branching primitive not only dispatches to different code based on an input tag, but also that it places different values of different types in scope according to the branch. Most languages only branch on booleans, without gaining any type information at all. This is actually a big problem and relates to the nullability problem, explained at:…
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
being sugar for reverse list = case list of
[] -> []
(x:xs) -> reverse xs ++ [x]
Since in that case, pattern matching on arguments is really just sugar for a case statement.