What does \m mean in expression "l = \m -> ..."?

Viewed 126
    semOp l = \m -> case l of
                LD g -> case m of 
                    St xs -> St (g::xs)
                    _ -> Error

Just want to know what does the \m part is doing here.

2 Answers

\m -> ... is syntax for anonymous function, aka "lambda-expression".

For example, the following two declarations would be equivalent:

f x = x + 5
f = \x -> x + 5

Both define a function with one parameter x that returns a number greater than x by 5.

I wanted to add to Fyodor’s answer by saying that this is a slightly unusual way to write this - it’s making explicit that semOp l returns a lambda. The following are all valid and equivalent ways to write this function’s beginning:

semOp l m = case l of ..
semOp l   = \m -> case l of ..
semOp     = \l -> \m -> case l of ..
semOp     = \l m -> case l of ..

You might be most used to the first version, but in some languages like Haskell these can have slightly difference performance impacts - but this isn’t something for you to worry about, particularly in Elm as far as I understand.

Related