This is slightly off-topic, but you might be interested in the monad-layers package that obviates the need for a function like liftN.

Thanks,
Arjun


On Thu, Oct 17, 2013 at 1:44 PM, Wvv <vitea3v@rambler.ru> wrote:
Thank you!

Unfortunately, liftN always take same number of arguments.
So, polyvariadic "magic" don't work here.


wren ng thornton wrote
> On 10/16/13 5:06 PM, Wvv wrote:
>> I try to write a function "liftN", but I'm not satisfied with result.
>>
>> lift :: (MonadTrans t) => Monad m => m a -> t m a
>>
>> liftN n
>> š š š| n < 1 š š š = error "liftN: n<1"
>> š š š| n == 1 š š = lift
>> š š š| otherwise = lift . (liftN (n-1))
>>
>> 1) I know(?), that it is impossible to write liftN now: typechecker can't
>> decide which signature it is.
>
> You should check out the solutions for encoding polyvariadic functions,
> e.g.
>
> *
> &lt;http://community.haskell.org/~wren/wren-extras/dist/doc/html/wren-extras/Data-List-ZipWithN.html&gt;
> * &lt;http://okmij.org/ftp/Haskell/polyvariadic.html#polyvartype-fn&gt;
> * &lt;http://paczesiowa.blogspot.com/2010/03/generalized-zipwithn.html&gt;
> *
> &lt;http://hackage.haskell.org/package/TypeCompose-0.9.9/docs/Data-Zip.html&gt;
>
> --
> Live well,
> ~wren
> _______________________________________________
> Haskell-Cafe mailing list

> Haskell-Cafe@

> http://www.haskell.org/mailman/listinfo/haskell-cafe





--
View this message in context: http://haskell.1045720.n5.nabble.com/liftN-tp5738612p5738648.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe