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.

Thanks!

---

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)]
Nothing
test>

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