[Haskell-cafe] Client-extensible heterogeneous types (Duck-typed
variadic functions?)
Jacek Generowicz
jacek.generowicz at cern.ch
Thu Oct 14 06:09:40 EDT 2010
On 2010 Oct 14, at 09:58, Ketil Malde wrote:
> Jacek Generowicz <jacek.generowicz at cern.ch> writes:
>
>> Let's say I need an Int -> String. Both
>>
>> (fnA2 :: Banana -> String) . (fnA1:: Int -> Banana)
>>
>> and
>>
>> (fnB2 :: Onion -> String) . (fnB1 :: Int -> Onion)
>>
>> will do. So please allow me to store (fnA1, fnA2) and (fnB1, fnB2) in
>> the same place.
>
> I think you can do this fairly easy with existentials, but..
Yup, that's got through to me by now :-)
>> The program can tell that it can combine them with (.)
>
> ..what else do you want to be able to do with them? (Because, if
> this is
> all, you'd just store the combination, no?).
Yes, if the components became available at the same time. But they
don't.
However, I think that currying caters for this separate arrival time
problem. Hmm, except that I would like to be able to store a
collection of incomplete combinations and say "complete the
combination by injecting random arguments of the relevant type". (This
probably won't make sense unless you saw the "arithmetic test"
motivating example.) And currying can't deal with this, as the
*incomplete* combinations will have different types.
But I suspect that Brandon's suggestion to use QuickCheck's Gen monad,
could well help with this.
More information about the Haskell-Cafe
mailing list