<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Lifting</title>
	<atom:link href="http://blog.tmorris.net/lifting/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tmorris.net/lifting/</link>
	<description>The weblog of Tony Morris</description>
	<pubDate>Sat, 19 May 2012 02:53:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: λ Tony’s blog λ &#187; Blog Archive &#187; Lifting (Haskell addendum)</title>
		<link>http://blog.tmorris.net/lifting/#comment-106017</link>
		<dc:creator>λ Tony’s blog λ &#187; Blog Archive &#187; Lifting (Haskell addendum)</dc:creator>
		<pubDate>Fri, 19 Aug 2011 01:03:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-106017</guid>
		<description>[...] follow-on from Lifting. A port of the Scala code to Haskell follows. class Lift f where lift0 :: a -&#62; f a &#160; lift1 [...]</description>
		<content:encoded><![CDATA[<p>[...] follow-on from Lifting. A port of the Scala code to Haskell follows. class Lift f where lift0 :: a -&gt; f a &nbsp; lift1 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/lifting/#comment-101810</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Mon, 25 Jul 2011 21:34:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-101810</guid>
		<description>Germán, I'd use the next best thing available. Pattern-matching is a last resort, but in the absence of specialised combinators I might just have to resort that low in abstraction.</description>
		<content:encoded><![CDATA[<p>Germán, I&#8217;d use the next best thing available. Pattern-matching is a last resort, but in the absence of specialised combinators I might just have to resort that low in abstraction.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Germán</title>
		<link>http://blog.tmorris.net/lifting/#comment-101742</link>
		<dc:creator>Germán</dc:creator>
		<pubDate>Mon, 25 Jul 2011 15:01:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-101742</guid>
		<description>I tried ListLift and OptionLift, for which I tend to use for comprehensions. But these in turn are based on flatMap/map, right? If there was no flatMap/map, I guess you'd go for imperative iteration and pattern matching. Am I off the mark?</description>
		<content:encoded><![CDATA[<p>I tried ListLift and OptionLift, for which I tend to use for comprehensions. But these in turn are based on flatMap/map, right? If there was no flatMap/map, I guess you&#8217;d go for imperative iteration and pattern matching. Am I off the mark?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/lifting/#comment-100732</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Wed, 20 Jul 2011 21:26:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-100732</guid>
		<description>Hi Kenbot, yes a monad gives rise to all of the operations, however, a monad is not necessary. You may weak the interface to an applicative functor, which has some desirable properties that monads do not.

Channing, you'd just reimplement the bodies of flatMap/map in your definition of ap. If you're comfortable with knowing how it all works, just use flatMap/map.</description>
		<content:encoded><![CDATA[<p>Hi Kenbot, yes a monad gives rise to all of the operations, however, a monad is not necessary. You may weak the interface to an applicative functor, which has some desirable properties that monads do not.</p>
<p>Channing, you&#8217;d just reimplement the bodies of flatMap/map in your definition of ap. If you&#8217;re comfortable with knowing how it all works, just use flatMap/map.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Channing Walton</title>
		<link>http://blog.tmorris.net/lifting/#comment-100622</link>
		<dc:creator>Channing Walton</dc:creator>
		<pubDate>Wed, 20 Jul 2011 08:51:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-100622</guid>
		<description>Hi Tony,
you mentioned that using map/flatmap is cheating. Any chance of a hint how to implement ap without flatmap/map?

Thanks

Channing</description>
		<content:encoded><![CDATA[<p>Hi Tony,<br />
you mentioned that using map/flatmap is cheating. Any chance of a hint how to implement ap without flatmap/map?</p>
<p>Thanks</p>
<p>Channing</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kenbot</title>
		<link>http://blog.tmorris.net/lifting/#comment-100376</link>
		<dc:creator>Kenbot</dc:creator>
		<pubDate>Tue, 19 Jul 2011 12:50:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-100376</guid>
		<description>So it looks like most of these can be replaced with a class MonadLift[M[_]: scalaz.Monad] extends LiftImpl[M].

I'm not sure if this can be applied to the Function1 example though.  Is it possible?</description>
		<content:encoded><![CDATA[<p>So it looks like most of these can be replaced with a class MonadLift[M[_]: scalaz.Monad] extends LiftImpl[M].</p>
<p>I&#8217;m not sure if this can be applied to the Function1 example though.  Is it possible?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paulo</title>
		<link>http://blog.tmorris.net/lifting/#comment-100190</link>
		<dc:creator>Paulo</dc:creator>
		<pubDate>Mon, 18 Jul 2011 21:40:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-100190</guid>
		<description>Thank you! I did try to annotate with Either[Char, Int] before, but it wasn't working. My fault though, I had 2.7 installed instead of 2.9, and it seems I can drop the type-annotation entirely.</description>
		<content:encoded><![CDATA[<p>Thank you! I did try to annotate with Either[Char, Int] before, but it wasn&#8217;t working. My fault though, I had 2.7 installed instead of 2.9, and it seems I can drop the type-annotation entirely.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/lifting/#comment-99932</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Mon, 18 Jul 2011 07:12:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-99932</guid>
		<description>Hey Paulo, You'll have to type-annotate your Left('a') value.</description>
		<content:encoded><![CDATA[<p>Hey Paulo, You&#8217;ll have to type-annotate your Left(&#8217;a') value.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik</title>
		<link>http://blog.tmorris.net/lifting/#comment-99762</link>
		<dc:creator>Erik</dc:creator>
		<pubDate>Sun, 17 Jul 2011 13:35:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-99762</guid>
		<description>Thanks Tony! This is short and very sweet, just the way I like it. Really enjoyed this one too, btw: http://blog.tmorris.net/understanding-practical-api-design-static-typing-and-functional-programming.</description>
		<content:encoded><![CDATA[<p>Thanks Tony! This is short and very sweet, just the way I like it. Really enjoyed this one too, btw: <a href="http://blog.tmorris.net/understanding-practical-api-design-static-typing-and-functional-programming"  rel="nofollow">http://blog.tmorris.net/understanding-practical-api-design-static-typing-and-functional-programming</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paulo</title>
		<link>http://blog.tmorris.net/lifting/#comment-99740</link>
		<dc:creator>Paulo</dc:creator>
		<pubDate>Sun, 17 Jul 2011 11:16:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=1025#comment-99740</guid>
		<description>I'm having some trouble with the third one. Possibly I'm not understanding the type correctly, but shouldn't the following typecheck:

val el = new EitherLift[Char]
val f1 = (x: Int) =&#62; x + 2
el.lift1(f1)(Right(13))  // Ok, gives the expected result Right(15)
el.lift1(f1)(Left('a'))  // Fails to typecheck</description>
		<content:encoded><![CDATA[<p>I&#8217;m having some trouble with the third one. Possibly I&#8217;m not understanding the type correctly, but shouldn&#8217;t the following typecheck:</p>
<p>val el = new EitherLift[Char]<br />
val f1 = (x: Int) =&gt; x + 2<br />
el.lift1(f1)(Right(13))  // Ok, gives the expected result Right(15)<br />
el.lift1(f1)(Left(&#8217;a'))  // Fails to typecheck</p>
]]></content:encoded>
	</item>
</channel>
</rss>

