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?