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...
Hi Jeff
Answered on Stackoverflow. Good question. The tutorial should be clear about using the preprocessor. Sorry.
Sergio
On Sun, 18 Nov 2018, at 19:50, Jeffrey Brown jeffbrown.the@gmail.com wrote:
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...
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown
curry mailing list -- curry@lists.rwth-aachen.de To unsubscribe send an email to curry-leave@lists.rwth-aachen.de https://lists.rwth-aachen.de/postorius/lists/curry.lists.rwth-aachen.de
Awesome! Thanks, Sergio!
On Sun, Nov 18, 2018 at 10:24 PM h7sa@pdx.edu wrote:
Hi Jeff
Answered on Stackoverflow. Good question. The tutorial should be clear about using the preprocessor. Sorry.
Sergio
On Sun, 18 Nov 2018, at 19:50, Jeffrey Brown jeffbrown.the@gmail.com wrote:
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...
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often
miss
messages here) | Github https://github.com/jeffreybenjaminbrown
curry mailing list -- curry@lists.rwth-aachen.de To unsubscribe send an email to curry-leave@lists.rwth-aachen.de https://lists.rwth-aachen.de/postorius/lists/curry.lists.rwth-aachen.de
Hi Jeff,
maybe at some tome in the future, default rules, set functions etc will become part of the syntax of Curry and, thus, processed by the standard parser.
In the current "development" state, they are processed and implemented by the Curry preprocessor. This provides more flexibility for us (to play with different implementations) but allows also unintended uses. As a compromise, you might use CurryCheck, a property-based test tool which also perform some static code tests. For instance, running CurryCheck on your program generates the the message
Analyzing module 'Test'... ============================================================================== STATIC ERRORS IN PROGRAMS: 'Test' uses default rules or det. operations but not the preprocessor! Hint: insert line: {-# OPTIONS_CYMAKE -F --pgmF=currypp #-} ==============================================================================
Hence, you see what is missing...
CurryCheck can easily be installed by Curry's package manager:
cypm update && cypm install currycheck
Best regards,
Michael
On 11/19/18 4:49 AM, Jeffrey Brown wrote:
Awesome! Thanks, Sergio!
On Sun, Nov 18, 2018 at 10:24 PM <h7sa@pdx.edu mailto:h7sa@pdx.edu> wrote:
Hi Jeff Answered on Stackoverflow. Good question. The tutorial should be clear about using the preprocessor. Sorry. Sergio On Sun, 18 Nov 2018, at 19:50, Jeffrey Brown <jeffbrown.the@gmail.com <mailto:jeffbrown.the@gmail.com>> wrote: > 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-curry-language-why-and-how > > -- > Jeff Brown | Jeffrey Benjamin Brown > Website <https://msu.edu/~brown202/> | Facebook > <https://www.facebook.com/mejeff.younotjeff> | LinkedIn > <https://www.linkedin.com/in/jeffreybenjaminbrown>(spammy, so I often miss > messages here) | Github <https://github.com/jeffreybenjaminbrown> > _______________________________________________ > curry mailing list -- curry@lists.rwth-aachen.de <mailto:curry@lists.rwth-aachen.de> > To unsubscribe send an email to curry-leave@lists.rwth-aachen.de <mailto:curry-leave@lists.rwth-aachen.de> > https://lists.rwth-aachen.de/postorius/lists/curry.lists.rwth-aachen.de
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown
I've almost got currypp working! It's installed, but reports "pakcs-frontend: /usr/lib/pakcs/lib/.curry/Prelude.uacy: openFile: permission denied (Permission denied) ERROR: i/o error: ERROR: user error: Illegal source program". I put more details on StackOverflow[1].
Thank you both!
[1] https://stackoverflow.com/questions/53357361/specifying-default-rules-in-the...
On Mon, Nov 19, 2018 at 12:07 PM Michael Hanus mh@informatik.uni-kiel.de wrote:
Hi Jeff,
maybe at some tome in the future, default rules, set functions etc will become part of the syntax of Curry and, thus, processed by the standard parser.
In the current "development" state, they are processed and implemented by the Curry preprocessor. This provides more flexibility for us (to play with different implementations) but allows also unintended uses. As a compromise, you might use CurryCheck, a property-based test tool which also perform some static code tests. For instance, running CurryCheck on your program generates the the message
Analyzing module 'Test'...
============================================================================== STATIC ERRORS IN PROGRAMS: 'Test' uses default rules or det. operations but not the preprocessor! Hint: insert line: {-# OPTIONS_CYMAKE -F --pgmF=currypp #-}
==============================================================================
Hence, you see what is missing...
CurryCheck can easily be installed by Curry's package manager:
cypm update && cypm install currycheck
Best regards,
Michael
On 11/19/18 4:49 AM, Jeffrey Brown wrote:
Awesome! Thanks, Sergio!
On Sun, Nov 18, 2018 at 10:24 PM <h7sa@pdx.edu mailto:h7sa@pdx.edu>
wrote:
Hi Jeff Answered on Stackoverflow. Good question. The tutorial should be clear about using the preprocessor. Sorry. Sergio On Sun, 18 Nov 2018, at 19:50, Jeffrey Brown <jeffbrown.the@gmail.com <mailto:jeffbrown.the@gmail.com>> wrote: > 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...
> > -- > Jeff Brown | Jeffrey Benjamin Brown > Website <https://msu.edu/~brown202/> | Facebook > <https://www.facebook.com/mejeff.younotjeff> | LinkedIn > <https://www.linkedin.com/in/jeffreybenjaminbrown>(spammy, so I often miss > messages here) | Github <
https://github.com/jeffreybenjaminbrown%3E
> _______________________________________________ > curry mailing list -- curry@lists.rwth-aachen.de <mailto:curry@lists.rwth-aachen.de> > To unsubscribe send an email to curry-leave@lists.rwth-aachen.de <mailto:curry-leave@lists.rwth-aachen.de> >
https://lists.rwth-aachen.de/postorius/lists/curry.lists.rwth-aachen.de
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown
Hi Jeff,
I jsut answered it on StackOverflow. Since it might be interesting to readers of this mailing list, I include some part of it here.
The permission error is due to the fact that not all possible intermediate representations of a Curry program are precompiled in the Ubuntu package. Unfortunately, the "default rule translator" of CurryPP requires one of these intermediate representations.
The Ubuntu/Debian package is intended only for using the kernel of Curry. For other extensions and more advanced tools, I recommend to install PAKCS manually, e.g., the current release from https://www.informatik.uni-kiel.de/%7Epakcs/download.html If you already have Ubuntu, a simple `make` should be sufficient.
Regards,
Michael
On 11/22/18 6:17 AM, Jeffrey Brown wrote:
I've almost got currypp working! It's installed, but reports "pakcs-frontend: /usr/lib/pakcs/lib/.curry/Prelude.uacy: openFile: permission denied (Permission denied) ERROR: i/o error: ERROR: user error: Illegal source program". I put more details on StackOverflow[1].
Thank you both!
[1] https://stackoverflow.com/questions/53357361/specifying-default-rules-in-the...
On Mon, Nov 19, 2018 at 12:07 PM Michael Hanus <mh@informatik.uni-kiel.de mailto:mh@informatik.uni-kiel.de> wrote:
Hi Jeff, maybe at some tome in the future, default rules, set functions etc will become part of the syntax of Curry and, thus, processed by the standard parser. In the current "development" state, they are processed and implemented by the Curry preprocessor. This provides more flexibility for us (to play with different implementations) but allows also unintended uses. As a compromise, you might use CurryCheck, a property-based test tool which also perform some static code tests. For instance, running CurryCheck on your program generates the the message Analyzing module 'Test'... ============================================================================== STATIC ERRORS IN PROGRAMS: 'Test' uses default rules or det. operations but not the preprocessor! Hint: insert line: {-# OPTIONS_CYMAKE -F --pgmF=currypp #-} ============================================================================== Hence, you see what is missing... CurryCheck can easily be installed by Curry's package manager: > cypm update && cypm install currycheck Best regards, Michael On 11/19/18 4:49 AM, Jeffrey Brown wrote: > Awesome! Thanks, Sergio! > > On Sun, Nov 18, 2018 at 10:24 PM <h7sa@pdx.edu <mailto:h7sa@pdx.edu> <mailto:h7sa@pdx.edu <mailto:h7sa@pdx.edu>>> wrote: > > Hi Jeff > > Answered on Stackoverflow. Good question. The tutorial should be > clear about using the preprocessor. Sorry. > > Sergio > > On Sun, 18 Nov 2018, at 19:50, Jeffrey Brown > <jeffbrown.the@gmail.com <mailto:jeffbrown.the@gmail.com> <mailto:jeffbrown.the@gmail.com <mailto:jeffbrown.the@gmail.com>>> wrote: > > > 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-curry-language-why-and-how > > > > -- > > Jeff Brown | Jeffrey Benjamin Brown > > Website <https://msu.edu/~brown202/> | Facebook > > <https://www.facebook.com/mejeff.younotjeff> | LinkedIn > > <https://www.linkedin.com/in/jeffreybenjaminbrown>(spammy, so I > often miss > > messages here) | Github <https://github.com/jeffreybenjaminbrown> > > > _______________________________________________ > > curry mailing list -- curry@lists.rwth-aachen.de <mailto:curry@lists.rwth-aachen.de> > <mailto:curry@lists.rwth-aachen.de <mailto:curry@lists.rwth-aachen.de>> > > To unsubscribe send an email to curry-leave@lists.rwth-aachen.de <mailto:curry-leave@lists.rwth-aachen.de> > <mailto:curry-leave@lists.rwth-aachen.de <mailto:curry-leave@lists.rwth-aachen.de>> > > > https://lists.rwth-aachen.de/postorius/lists/curry.lists.rwth-aachen.de > > > > -- > Jeff Brown | Jeffrey Benjamin Brown > Website <https://msu.edu/~brown202/> | Facebook > <https://www.facebook.com/mejeff.younotjeff> | LinkedIn > <https://www.linkedin.com/in/jeffreybenjaminbrown>(spammy, so I often > miss messages here) | Github > <https://github.com/jeffreybenjaminbrown>
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(spammy, so I often miss messages here) | Github https://github.com/jeffreybenjaminbrown