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) https://www.informatik.uni-kiel.de/~curry/tutorial/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? [1] https://stackoverflow.com/questions/53357361/specifying-default-rules-in-the...