[Haskell-beginners] Trying to write netwire combiner similar to multicast

Nathan Hüsken nathan.huesken at posteo.de
Tue Nov 6 13:24:42 CET 2012

On 11/06/2012 02:44 AM, Ertugrul Söylemez wrote:
> Nathan Hüsken <nathan.huesken at posteo.de> wrote:
>>> Also your interface seems very unsafe to me.  I suggest the
>>> following interface instead:
>>>     shrinking :: (Monad m) => [Wire e m a b] -> Wire e m a [b]
>>> Then normally 'a' could be something like Map K A.
>> That would mean, the individual wires have to know there own id?!?
>> Mmmh, I will try to keep this bookkeeping out of the wires with this
>> interface:
>> shrinking :: (Monad m) => [Wire e m a b] -> Wire e m (Map Int a)
>> (Int,b)
>> shrinking will assign the ids to the wires and returns them with the
>> result. I will see where this gets me ... :).
> The problem with such an interface is the inflexibility.  Notice that
> removing a subwire will change the numbering of all subsequent wires.
> The interface I suggested follows this basic idea:
>     shrinking ::
>         (Monad m)
>         => [(a' -> a, Wire e m a b)]
>         -> Wire e m a' b

That should be ".. -> Wire e m a' [b]", correct?

> The reasoning is that this way you disconnect the individual values from
> the positions in the subwire list.  This will also make writing the
> combinator a bit simpler.  If you will here is an interesting
> alternative:
>     data Subwire e m a b =
>         forall a'. Subwire (a -> a') (Wire e m a' b)
>     shrinking :: (Monad m) => [Subwire e m a b] -> Wire e m a b

Ohh, the scary forall keyword :).
Here it does nothing but hide the a' type from the type signature, is
that correct?


More information about the Beginners mailing list