Re: findall resulting in strange message

From: Michael Hanus <>
Date: Fri, 19 Apr 2013 18:04:10 +0200

Hi Larry,

thanks for the suggestion. We will just omit in the next release
of KiCS2 these prelude operations so that one gets better error
messages. Moreover, this will also be explained in the manual.

Best regards,


On 04/19/2013 04:13 PM, Lee, Larry D. wrote:
> Thanks for clearing this up. I had encountered similar error messages and figured that it was due to an incomplete implementation, but I didn't know what the reasoning was. Perhaps, a comment could be added to Prelude.curry explaining the situation?
> On Apr 19, 2013, at 8:21 AM, Michael Hanus<> wrote:
>> On 04/19/2013 12:34 PM, Wolfgang Jeltsch wrote:
>>> I have a problem with using KiCS2. I have a source file that contains
>>> the following code:
>>>> sublist :: [a] -> [a]
>>>> sublist (pre ++ sub ++ post) = sub
>>> Now I load this into KiCS2 and enter the expression
>>> findall (\sub -> sub =:= sublist "Hallo!")
>>> at the prompt. KiCS2 answers with the message
>>> Main: external_ndho_C_try .
>>> What does this mean? Does this indicate a bug?
>> The error message is not good and should be improved.
>> Actually, the primitive encapsulation operator "try"
>> which is used in the standard prelude to implement
>> "findall" is not implemented in KiCS2.
>> Since appropriate definitions of search operators
>> is an ongoing topic for discussion (since the "naive"
>> inclusion of findall in the first version of Curry),
>> KiCS2 supports two more appropriate alternatives
>> to encapsulate non-deterministic computations:
>> 1. Strong encapsulation: This means that all potential
>> non-determinism is encapsulated. Since this might
>> result in dependencies on the evaluation strategy
>> (if non-deterministic computations are defined "outside"
>> and passed "inside" an encapsulation operator), this kind
>> of encapsulation is only available as I/O operations.
>> For instance, the library AllSolutions provides
>> getAllSolutions :: (a -> Success) -> IO [a]
>> so that you can compute all your values by
>> getAllSolutions (\sub -> sub =:= sublist "Hallo!")>>= print
>> There is also the library SearchTree which provides
>> programmable search strategies (depth-first, breadth-first,
>> iterative deepening).
>> 2. Weak encapsulation: This means that only the non-determinism
>> defined inside an encapsulation operator is encapsulated.
>> Since this is independent on the evaluation strategy,
>> these concept can be also used independent of the I/O monad.
>> Conceptually, these operators are offered as "set functions"
>> which compute the set of all results but do not encapsulate
>> non-determinism in the actual arguments. KiCS2 provides this
>> functionality by the library SetFunctions. For instance, you
>> can compute the set of all your results by
>> (set1 sublist "Hallo!")
>> Since the result is a set, you can only map or fold the results
>> (see operations in the library SetFunctions) or transform them
>> into a list by sorting them (of course, this works only for
>> finite search spaces).
>> I hope this explanation helps. If you need more infos or pointers
>> to the literature, please let me know.
>> Best regards,
>> Michael
>> _______________________________________________
>> curry mailing list
>> curry_at_lists.RWTH-Aachen.DE
>> http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry

curry mailing list
Received on Fr Apr 19 2013 - 18:06:21 CEST

This archive was generated by hypermail 2.3.0 : Fr Jul 23 2021 - 07:15:04 CEST