[Haskell-cafe] Re: What's the deal with Clean?
ok at cs.otago.ac.nz
Sun Nov 8 20:03:16 EST 2009
>>>> One of this differences between Haskell and Clean I did not see
>>>> mentioned in
>>>> this discussion is that Clean does not allow so-called partial
>>>> parametrisation. I.e. all function calls have to be fully saturated
I think there may be a misunderstanding here.
Beware: I haven't used Clean in a while.
(1) Clean didn't have sections.
This is no big deal. Clean does have "flip" in StdFunc.
(x +) => (+) x
(+ y) => (flip (+)) y
(2) Clean requires saturated *DEFINITIONS*.
If you declare
f :: A B C -> D
then each rule you give for f must have exactly three arguments.
If you declare
f :: A -> B -> C -> D
then each rule you give for f must have exactly one argument.
See section 3.7 of the Clean 2.1 language report.
This has no consequences for how you can *apply* such a
function. Section 3.7.1 of the report is explicit:
In CLEAN all symbols (functions and constructors) are
defined with fixed arity. However, in an application
it is of course allowed to apply them to an arbitrary
number of arguments. A curried application of a
function is an application of a function with a number
of arguments which is less than its arity (note that
in CLEAN the arity of a function can be derived from
its type). With the aid of the predefined internal
function _AP a curried function applied on the
required number of arguments is transformed into an
equivalent uncurried function application. The type
axiom's (sic.) of the CLEAN type system include for
all s defined with arity n the equivalence of
s::t1 t2 ... tn -> tr.
More information about the Haskell-Cafe