I posted this question on Stackoverflow[1] yesterday and haven't received any answers yet. I've duplicated the question below, but an answer posted to StackOverflow would be more useful to future students, if you're so inclined.



In section 3.5.6 of the Curry tutorial (pdf), we are advised to use default rules to "regain control after a failed search". The following example is given. (For clarity I have added a type signature and curried the input.)

lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup’default _ _ = Nothing

I can't get that to compile unless I replace the  with a '. Once I do, it behaves like this:

test> test.lookup 1 [(2,3)]
*** No value found!

Question 1: What is the default declaration for?

Why would you need to specify that a particular clause is the default one? Won't it be arrived at one way or another, once the others fail?

Question 2: How is it written? Should it be written at all?

If instead I drop the string 'default:

lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup _ _ = Nothing

it behaves as intended:

test> test.lookup 1 [(2,3)]

Has the 'default syntax changed since the tutorial was written? Has it been removed altogether?

Jeff Brown | Jeffrey Benjamin Brown
Website   |   Facebook   |   LinkedIn(spammy, so I often miss messages here)   |   Github