<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fleurer &#187; FP</title>
	<atom:link href="http://www.fleurer-lee.com/tag/fp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fleurer-lee.com</link>
	<description>rage and love, story of my life.</description>
	<lastBuildDate>Thu, 02 Sep 2010 11:07:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>State Monad笔记二</title>
		<link>http://www.fleurer-lee.com/2010/03/05/state-monad%e7%ac%94%e8%ae%b0%e4%ba%8c/</link>
		<comments>http://www.fleurer-lee.com/2010/03/05/state-monad%e7%ac%94%e8%ae%b0%e4%ba%8c/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 10:25:08 +0000</pubDate>
		<dc:creator>fleurer</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[monad]]></category>

		<guid isPermaLink="false">http://www.fleurer-lee.com/?p=645752</guid>
		<description><![CDATA[老师：Monad想到什么呢？
同学：毛茸茸的猫猫!
好同学们，请默念“Warm and Fuzzy”100遍~
。。
。。
。。
。
。
。
。
。
。

。
。
。
。。
。。
100遍了没。。。好，我们先看看State猫猫的类型吧 ^_^

newtype State s a = State &#123; runState :: s -&#62; &#40;a, s&#41; &#125;

里面有个难看的record syntax，咱们无视之，改成：

data State g v = State &#40;g -&#62; &#40;v, g&#41;&#41;

就是一个lambda，外加一二元组：v表示猫猫正经计算中的值，g就表示猫猫的状态啦(就一个全局变量嘛)~那个lambda的参数g也一样。相应的猫猫Instance也就是如下：

instance Monad &#40;State g&#41; where
    return v = 
        State $ \g -&#62; &#40;v, g&#41;
&#160;
    &#40;&#62;&#62;=&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>老师：Monad想到什么呢？<br />
同学：毛茸茸的猫猫!</p>
<p>好同学们，请默念“Warm and Fuzzy”100遍~</p>
<p>。。<br />
。。<br />
。。<br />
。<br />
。<br />
。<br />
。<br />
。<br />
。<br />
<a href="http://www.fleurer-lee.com/wp-content/uploads/2010/03/p_large_Pg4a_4600000102612d0c.jpg"><img src="http://www.fleurer-lee.com/wp-content/uploads/2010/03/p_large_Pg4a_4600000102612d0c-300x225.jpg" alt="" title="p_large_Pg4a_4600000102612d0c" width="600" class="alignnone size-medium wp-image-645756" /></a><br />
。<br />
。<br />
。<br />
。。<br />
。。</p>
<p>100遍了没。。。好，我们先看看State猫猫的类型吧 ^_^</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">newtype</span> State s a <span style="color: #339933; font-weight: bold;">=</span> State <span style="color: green;">&#123;</span> runState <span style="color: #339933; font-weight: bold;">::</span> s <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>a<span style="color: #339933; font-weight: bold;">,</span> s<span style="color: green;">&#41;</span> <span style="color: green;">&#125;</span></pre></div></div>

<p>里面有个难看的record syntax，咱们无视之，改成：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">data</span> State g v <span style="color: #339933; font-weight: bold;">=</span> State <span style="color: green;">&#40;</span>g <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>v<span style="color: #339933; font-weight: bold;">,</span> g<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span></pre></div></div>

<p>就是一个lambda，外加一二元组：v表示猫猫正经计算中的值，g就表示猫猫的状态啦(就一个全局变量嘛)~那个lambda的参数g也一样。相应的猫猫Instance也就是如下：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">instance</span> <span style="color: #cccc00; font-weight: bold;">Monad</span> <span style="color: green;">&#40;</span>State g<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">where</span>
    <span style="font-weight: bold;">return</span> v <span style="color: #339933; font-weight: bold;">=</span> 
        State <span style="color: #339933; font-weight: bold;">$</span> \g <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>v<span style="color: #339933; font-weight: bold;">,</span> g<span style="color: green;">&#41;</span>
&nbsp;
    <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&gt;&gt;=</span><span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span>State m<span style="color: green;">&#41;</span> f <span style="color: #339933; font-weight: bold;">=</span> 
        State <span style="color: #339933; font-weight: bold;">$</span> \g <span style="color: #339933; font-weight: bold;">-&gt;</span> 
                <span style="color: #06c; font-weight: bold;">let</span> <span style="color: green;">&#40;</span>v<span style="color: #339933; font-weight: bold;">,</span> g'<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> m g
                    <span style="color: green;">&#40;</span>State m'<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> f v
                <span style="color: #06c; font-weight: bold;">in</span>  m' g'</pre></div></div>

<p>还是一环套一环，函数编程没有变量，那就向下传递的时候改变它的值就行了。再加两个小喽骡：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">get<span style="color: #339933; font-weight: bold;">_</span>g <span style="color: #339933; font-weight: bold;">=</span> State <span style="color: #339933; font-weight: bold;">$</span> \g <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>g<span style="color: #339933; font-weight: bold;">,</span> g<span style="color: green;">&#41;</span>
set<span style="color: #339933; font-weight: bold;">_</span>g v <span style="color: #339933; font-weight: bold;">=</span> State <span style="color: #339933; font-weight: bold;">$</span> \<span style="color: #339933; font-weight: bold;">_</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>v<span style="color: #339933; font-weight: bold;">,</span> v<span style="color: green;">&#41;</span></pre></div></div>

<p>全局变量的值不也在那个lambda的参数里么，get_g它设成计算中的值，这样在do-notation中就可以g <- get_g了。set_g则是把它的参数设到g里，而原先的g无视扔掉即可。</p>
<p>加个函数试验下：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">run <span style="color: green;">&#40;</span>State m<span style="color: green;">&#41;</span> i <span style="color: #339933; font-weight: bold;">=</span> m i 
&nbsp;
add1 <span style="color: #339933; font-weight: bold;">::</span> State <span style="color: #cccc00; font-weight: bold;">Int</span> <span style="color: #cccc00; font-weight: bold;">Int</span>
add1 <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
    g <span style="color: #339933; font-weight: bold;">&lt;-</span> get<span style="color: #339933; font-weight: bold;">_</span>g;
    set<span style="color: #339933; font-weight: bold;">_</span>g <span style="color: #339933; font-weight: bold;">$</span> g <span style="color: #339933; font-weight: bold;">+</span> <span style="color: red;">1</span>;
<span style="color: green;">&#125;</span>
&nbsp;
add3 <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
    add1;
    add1;
    add1;
<span style="color: green;">&#125;</span></pre></div></div>

<p>进ghci输入run add3 1可得(4,4)，可见那个“全局变量”就这么变化了。</p>
<p>回头再想想它的类型，一个二元组不就够了嘛，为什么要套那层lambda呢？试下就知道</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">data</span> State g v <span style="color: #339933; font-weight: bold;">=</span> State <span style="color: green;">&#40;</span>g<span style="color: #339933; font-weight: bold;">,</span> v<span style="color: green;">&#41;</span> 
&nbsp;
<span style="color: #06c; font-weight: bold;">instance</span> <span style="color: #cccc00; font-weight: bold;">Monad</span> <span style="color: green;">&#40;</span>State g<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">where</span>
    <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&gt;&gt;=</span><span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span>State <span style="color: green;">&#40;</span>g<span style="color: #339933; font-weight: bold;">,</span> v<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span> f <span style="color: #339933; font-weight: bold;">=</span> <span style="color: green;">&#40;</span>g<span style="color: #339933; font-weight: bold;">,</span> f v<span style="color: green;">&#41;</span></pre></div></div>

<p>看着不错，接着来：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">    <span style="font-weight: bold;">return</span> v <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #339933; font-weight: bold;">...</span></pre></div></div>

<p>发现问题了没，return我们实现不了&#8230;搞不到原先g的值，链子就断在了这一环。解决方法就是把它推后，不是没有g么，于是放到参数里等着别人(>>=)给，这算不算惰性呢？ :)</p>
<p>ps:明白了State是怎么回事，附一山寨parsec ^_^ <a href="http://github.com/Fleurer/FParser">http://github.com/Fleurer/FParser</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2010/03/05/state-monad%e7%ac%94%e8%ae%b0%e4%ba%8c/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>State Monad笔记一</title>
		<link>http://www.fleurer-lee.com/2010/02/25/state-monad%e7%ac%94%e8%ae%b0%e4%b8%80/</link>
		<comments>http://www.fleurer-lee.com/2010/02/25/state-monad%e7%ac%94%e8%ae%b0%e4%b8%80/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 12:19:40 +0000</pubDate>
		<dc:creator>fleurer</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[monad]]></category>

		<guid isPermaLink="false">http://www.fleurer-lee.com/?p=645747</guid>
		<description><![CDATA[去年听王猫猫讲过之后就一直心安理得再也没看过Monad，以至于到昨天还不知State Monad为何物&#8230;囧
关于State Monad，似乎见过的教材都是拿随机数作例子，拿Monad跟一堆let对比，满眼的二元组绕啊绕啊，我给你个Monad让它不那么绕（存疑）～其实什么东西理解不了，往往就是因为不知道它怎么用（比如复变函数 =&#8221;=）
换个例子，像那个筛掉一个List中重复元素的nub函数多好&#8230;.在命令式语言下边大约是这样：

def nub&#40;xs&#41;
    result=&#91;&#93;
    for x in xs
        if not result.include? x
	     result &#60;&#60; x
    return result

若在函数式语言下边，用迭代大约是这样：

inub :: &#40;Eq a&#41; =&#62; &#91;a&#93; -&#62; &#91;a&#93;
inub = inub' &#91;&#93; 
inub' rs &#91;&#93; = rs
inub' rs [...]]]></description>
			<content:encoded><![CDATA[<p>去年听王猫猫讲过之后就一直心安理得再也没看过Monad，以至于到昨天还不知State Monad为何物&#8230;囧</p>
<p>关于State Monad，似乎见过的教材都是拿随机数作例子，拿Monad跟一堆let对比，满眼的二元组绕啊绕啊，我给你个Monad让它不那么绕（存疑）～其实什么东西理解不了，往往就是因为不知道它怎么用（比如复变函数 =&#8221;=）</p>
<p>换个例子，像那个筛掉一个List中重复元素的nub函数多好&#8230;.在命令式语言下边大约是这样：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> nub<span style="color: black;">&#40;</span>xs<span style="color: black;">&#41;</span>
    result=<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> xs
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> result.<span style="color: black;">include</span><span style="color: #66cc66;">?</span> x
	     result <span style="color: #66cc66;">&lt;&lt;</span> x
    <span style="color: #ff7700;font-weight:bold;">return</span> result</pre></div></div>

<p>若在函数式语言下边，用迭代大约是这样：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">inub <span style="color: #339933; font-weight: bold;">::</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Eq</span> a<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span>
inub <span style="color: #339933; font-weight: bold;">=</span> inub' <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> 
inub' rs <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">=</span> rs
inub' rs <span style="color: green;">&#40;</span>x:xs<span style="color: green;">&#41;</span> 
    <span style="color: #339933; font-weight: bold;">|</span> x `<span style="font-weight: bold;">elem</span>` rs    <span style="color: #339933; font-weight: bold;">=</span> inub' rs xs
    <span style="color: #339933; font-weight: bold;">|</span> <span style="font-weight: bold;">otherwise</span>     <span style="color: #339933; font-weight: bold;">=</span> inub' <span style="color: green;">&#40;</span>rs<span style="color: #339933; font-weight: bold;">++</span><span style="color: green;">&#91;</span>x<span style="color: green;">&#93;</span><span style="color: green;">&#41;</span> xs</pre></div></div>

<p>inub&#8217;这个函数中有个rs参数，就相当于前面那个result变量。它的值会随着迭代发生改变，不同之处就是ts是引用透明的没有副作用。每次函数调用就是一个状态，状态就是一个值。</p>
<p>不喜欢给函数多加个参数怎么办？State Monad可以做到。在State Monad里面有两个函数可以使用：put，设置当前状态的值；get，获得当前状态的值。就相当于给函数加了一个（只有一个）可变的全局变量，在调用别的函数或者递归时这个值可以保留。</p>
<p>State Monad版本（我没觉得好看 =&#8221;=）：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">mnub <span style="color: #339933; font-weight: bold;">::</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Eq</span> a<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span>
mnub xs <span style="color: #339933; font-weight: bold;">=</span> evalState <span style="color: green;">&#40;</span>mnub' xs<span style="color: green;">&#41;</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span>
mnub' <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">=</span> get
mnub' <span style="color: green;">&#40;</span>x:xs<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
    rs <span style="color: #339933; font-weight: bold;">&lt;-</span> get;
    <span style="color: #06c; font-weight: bold;">if</span> x `<span style="font-weight: bold;">elem</span>` rs <span style="color: #06c; font-weight: bold;">then</span> <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
        mnub' xs;
    <span style="color: green;">&#125;</span><span style="color: green;">&#41;</span>
    <span style="color: #06c; font-weight: bold;">else</span> <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
        put <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>rs<span style="color: #339933; font-weight: bold;">++</span><span style="color: green;">&#91;</span>x<span style="color: green;">&#93;</span><span style="color: green;">&#41;</span>;
        mnub' xs;
    <span style="color: green;">&#125;</span><span style="color: green;">&#41;</span>;
<span style="color: green;">&#125;</span></pre></div></div>

<p>原理大约就是do-notation中的每个语句都是用一个wrapper的类型包起来再不断往下传递么，而State的wrapper就是个类型为(a,s)的二元组（外加一层lambda？），每个语句的返回值放到s里，那个全局的值则放在a里&#8230;具体还有点迷糊，哪天推导下再说好了  >_<</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2010/02/25/state-monad%e7%ac%94%e8%ae%b0%e4%b8%80/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Haskell趣学指南！</title>
		<link>http://www.fleurer-lee.com/2009/12/12/haskell%e8%b6%a3%e5%ad%a6%e6%8c%87%e5%8d%97%ef%bc%81/</link>
		<comments>http://www.fleurer-lee.com/2009/12/12/haskell%e8%b6%a3%e5%ad%a6%e6%8c%87%e5%8d%97%ef%bc%81/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 17:22:02 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[翻译]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645576</guid>
		<description><![CDATA[译言前几天被杯具了，还好当初嗅到苗头全都抓了来 -v-
新地址见http://fleurer-lee.com/lyah。
用自己写的小工具生成的html，parser的代码不到200行，代码写的非常之perl，不过显然还算够用。
代码高亮用的一个jquery插件Chili，很容易扩展，随便改两个正则就自制了个haskell高亮。
顺便校对了下翻译。

ChinaUnix上的朋友对“柯里函数”等译法的意见比较大，不过在校对中没有做修改。关于人名构成的术语，例如“Fourier transform”还是“傅立叶变换”，译者认为后者更好看。
“Function Application”直译作“函数应用”，在这里译为“函数调用”。相应的“partial application”直译作“部分应用”，在这里译为“不全调用”。
“predicate”在这里译为“限制条件”，因为译者认为“断言”这个词有点吓人。
保留了List，Tuple，List Comprehension等名词，不过将Triple之类译为“三元组”，“function with two parameters”译为“二元函数”。
把原先译文中“在处理数字时是非常有用的”类的句式改为“在处理数字时非常有用”，“的”真的是很别扭的。
有一节的标题“Texas Range”译为“德州区间”，因为译者老家在德州&#8230;囧

修改的比较仓促，bug依然还有很多。呵呵，欢迎提意见！ ^_^
update: 可以svn checkout它的源码：https://lyah-cn.googlecode.com/svn/trunk/
]]></description>
			<content:encoded><![CDATA[<p>译言前几天被杯具了，还好当初嗅到苗头全都抓了来 -v-</p>
<p>新地址见<a href="http://fleurer-lee.com/lyah">http://fleurer-lee.com/lyah</a>。</p>
<p>用自己写的<a href="http://code.google.com/p/fdoc/">小工具</a>生成的html，parser的代码不到200行，代码写的非常之perl，不过显然还算够用。<br />
代码高亮用的一个jquery插件<a href="http://noteslog.com/chili/">Chili</a>，很容易扩展，随便改两个正则就自制了个<a href="http://fleurer-lee.com/lyah/js/chili/code.js">haskell高亮</a>。</p>
<p>顺便校对了下翻译。</p>
<ul>
<li>ChinaUnix上的朋友对“柯里函数”等译法的意见比较大，不过在校对中没有做修改。关于人名构成的术语，例如“Fourier transform”还是“傅立叶变换”，译者认为后者更好看。</li>
<li>“Function Application”直译作“函数应用”，在这里译为“函数调用”。相应的“partial application”直译作“部分应用”，在这里译为“不全调用”。</li>
<li>“predicate”在这里译为“限制条件”，因为译者认为“断言”这个词有点吓人。</li>
<li>保留了List，Tuple，List Comprehension等名词，不过将Triple之类译为“三元组”，“function with two parameters”译为“二元函数”。</li>
<li>把原先译文中“在处理数字时是非常有用的”类的句式改为“在处理数字时非常有用”，“的”真的是很别扭的。</li>
<li>有一节的标题“Texas Range”译为“德州区间”，因为译者老家在德州&#8230;囧</li>
</ul>
<p>修改的比较仓促，bug依然还有很多。呵呵，欢迎提意见！ ^_^</p>
<p>update: 可以svn checkout它的源码：https://lyah-cn.googlecode.com/svn/trunk/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/12/12/haskell%e8%b6%a3%e5%ad%a6%e6%8c%87%e5%8d%97%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>理解Y组合子</title>
		<link>http://www.fleurer-lee.com/2009/09/19/%e7%90%86%e8%a7%a3y%e7%bb%84%e5%90%88%e5%ad%90/</link>
		<comments>http://www.fleurer-lee.com/2009/09/19/%e7%90%86%e8%a7%a3y%e7%bb%84%e5%90%88%e5%ad%90/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 06:00:55 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[Y-combinator]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645477</guid>
		<description><![CDATA[众所周知，lambda演算通过递归就可以图灵完备。好，用纯lambda演算写个递归吧。
等等，要递归必须得有名字，而lambda演算里赋予名字的唯一方式就是传递参数。像lisp那样define可不行啊。只能这样绕个圈子：

&#40;\f.\x.
    &#40;if  &#40;= x 1&#41;
        1
        &#40;* x &#40;f f  &#40;- x 1&#41;&#41;&#41;&#41;&#41;

这里把函数本身作为第一个参数传递给自己，从而实现的递归。要调用这个递归函数，还得套一个let（当然，换成lambda形式）:

&#40;&#40;\fac. &#40;fac fac 5&#41;&#41;
        &#40;\f.\x.
             [...]]]></description>
			<content:encoded><![CDATA[<p>众所周知，lambda演算通过递归就可以图灵完备。好，用纯lambda演算写个递归吧。</p>
<p>等等，要递归必须得有名字，而lambda演算里赋予名字的唯一方式就是传递参数。像lisp那样define可不行啊。只能这样绕个圈子：</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span>\f<span style="color: #66cc66;">.</span>\x<span style="color: #66cc66;">.</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span>  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #cc66cc;">1</span>
        <span style="color: #66cc66;">&#40;</span>* x <span style="color: #66cc66;">&#40;</span>f f  <span style="color: #66cc66;">&#40;</span>- x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>这里把函数本身作为第一个参数传递给自己，从而实现的递归。要调用这个递归函数，还得套一个let（当然，换成lambda形式）:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>\fac<span style="color: #66cc66;">.</span> <span style="color: #66cc66;">&#40;</span>fac fac <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>\f<span style="color: #66cc66;">.</span>\x<span style="color: #66cc66;">.</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
                    <span style="color: #cc66cc;">1</span>
                    <span style="color: #66cc66;">&#40;</span>* x <span style="color: #66cc66;">&#40;</span>f f <span style="color: #66cc66;">&#40;</span>- x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>真难看！每次递归都得把自己当作参数传递一遍，很机械！机械的活不应由人类做！想下，如果将递归函数里的(f f (- x 1))换成(f (- x 1))，或许还可以接受…好，Y组合子应运而生，现在你可以这样自然地递归了：</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;">Y <span style="color: #66cc66;">&#40;</span>\f<span style="color: #66cc66;">.</span>\x
     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #cc66cc;">1</span>
          <span style="color: #66cc66;">&#40;</span>* x <span style="color: #66cc66;">&#40;</span>f <span style="color: #66cc66;">&#40;</span>- x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">5</span></pre></div></div>

<p>数学家在追求美感上可是不遗余力啊。不过Y是如何做到的？</p>
<p>想想，Y组合子又叫不动点函数。什么是不动点？x=f(x)=f(f(x))…，这个x就是不动点：不管套多少层函数调用，在不动点上的值总是相等。Y f = f (Y f)=f (f (Y f))，这个Y f就是个不动点，高阶函数的不动点。什么是组合子？很简单，可以柯里化、没有自由变量的函数就是组合子 :)</p>
<p>便于理解，我们给(\f.\x (if (= x 1) 1 (* x (f (- x 1)))))这个lambda一个名字fac，看看一步步的递归是怎么来的：</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;">Y fac <span style="color: #cc66cc;">3</span>
<span style="color: #66cc66;">&gt;</span> fac <span style="color: #66cc66;">&#40;</span>Y fac<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">3</span>         	//transform<span style="color: #66cc66;">,</span> Y<span style="color: #66cc66;">!</span>
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>Y fac<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>        	//<span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">!=</span><span style="color: #cc66cc;">1</span> so recurse
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span>fac <span style="color: #66cc66;">&#40;</span>Y fac<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>    	//Y transform again
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>Y fac<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>       //<span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">!=</span><span style="color: #cc66cc;">1</span> so recurse
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span>fac <span style="color: #66cc66;">&#40;</span>Y fac<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>   	//Y transform again
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;"> * </span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;"> * </span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>             	//<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> so recursion ends<span style="color: #66cc66;">.</span>
<span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">6</span></pre></div></div>

<p>就是这样了。里面有柯里化，也有惰性求值（缺一不可！）。一环套一环，然后就递归了。</p>
<p>Y组合子的定义：Y = \y. (\x.y (x x)) (\x.y (x x))，天知道大神（大神的名字叫做Haskell Curry! -v-）是怎么想出来的 =v=</p>
<p>不妨自己在纸上推倒一下(也只能在纸上推倒，这东西在实际的编程中貌似是没有应用的 :D)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/09/19/%e7%90%86%e8%a7%a3y%e7%bb%84%e5%90%88%e5%ad%90/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>杯具渔民交流群 -_-!</title>
		<link>http://www.fleurer-lee.com/2009/09/13/fp%e4%ba%a4%e6%b5%81qq%e7%be%a4-_/</link>
		<comments>http://www.fleurer-lee.com/2009/09/13/fp%e4%ba%a4%e6%b5%81qq%e7%be%a4-_/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 02:28:34 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[杂碎]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645471</guid>
		<description><![CDATA[58853867
原haskell交流群
]]></description>
			<content:encoded><![CDATA[<p>58853867</p>
<p>原haskell交流群</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/09/13/fp%e4%ba%a4%e6%b5%81qq%e7%be%a4-_/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>并行的quicksort</title>
		<link>http://www.fleurer-lee.com/2009/07/24/%e5%b9%b6%e8%a1%8c%e7%9a%84quicksort/</link>
		<comments>http://www.fleurer-lee.com/2009/07/24/%e5%b9%b6%e8%a1%8c%e7%9a%84quicksort/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 13:01:21 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[备忘]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645315</guid>
		<description><![CDATA[haskell搞并行还是挺方便的。纯函数式没状态嘛，这儿锁啊钥匙啊什么的都不用管了。有个Control.Parallel，里貌似只有两个函数，一个par，表示两个并行计算；一个pseq，表示连续计算。参数都是两个名字。像处理个分治算法啥的，就再合适不过了。于是再次膜拜惰性求值，写起来真的太奇特了。

module Main where
import Control.Parallel
&#160;
--the classic one
qsort :: &#40;Ord a&#41; =&#62; &#91;a&#93; -&#62; &#91;a&#93;
qsort &#91;&#93; = &#91;&#93;
qsort &#40;x:xs&#41; =
 &#40;qsort lt&#41; ++ &#91;x&#93; ++ &#40;qsort gt&#41;
 where
  lt = filter &#40;&#60;x&#41; xs
  gt = filter &#40;&#62;=x&#41; xs
&#160;
&#160;
--the parallel one
psort :: &#40;Ord a&#41; =&#62; &#91;a&#93; -&#62; &#91;a&#93;
psort &#91;&#93; = &#91;&#93;
psort &#40;x:xs&#41; =
 sorted_lt `par` sorted_gt [...]]]></description>
			<content:encoded><![CDATA[<p>haskell搞并行还是挺方便的。纯函数式没状态嘛，这儿锁啊钥匙啊什么的都不用管了。有个Control.Parallel，里貌似只有两个函数，一个par，表示两个并行计算；一个pseq，表示连续计算。参数都是两个名字。像处理个分治算法啥的，就再合适不过了。于是再次膜拜惰性求值，写起来真的太奇特了。</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">module</span> Main <span style="color: #06c; font-weight: bold;">where</span>
<span style="color: #06c; font-weight: bold;">import</span> Control<span style="color: #339933; font-weight: bold;">.</span>Parallel
&nbsp;
<span style="color: #5d478b; font-style: italic;">--the classic one</span>
qsort <span style="color: #339933; font-weight: bold;">::</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Ord</span> a<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span>
qsort <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span>
qsort <span style="color: green;">&#40;</span>x:xs<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span>
 <span style="color: green;">&#40;</span>qsort lt<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#91;</span>x<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#40;</span>qsort gt<span style="color: green;">&#41;</span>
 <span style="color: #06c; font-weight: bold;">where</span>
  lt <span style="color: #339933; font-weight: bold;">=</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&lt;</span>x<span style="color: green;">&#41;</span> xs
  gt <span style="color: #339933; font-weight: bold;">=</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&gt;=</span>x<span style="color: green;">&#41;</span> xs
&nbsp;
&nbsp;
<span style="color: #5d478b; font-style: italic;">--the parallel one</span>
psort <span style="color: #339933; font-weight: bold;">::</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Ord</span> a<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#91;</span>a<span style="color: green;">&#93;</span>
psort <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span>
psort <span style="color: green;">&#40;</span>x:xs<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">=</span>
 sorted<span style="color: #339933; font-weight: bold;">_</span>lt `par` sorted<span style="color: #339933; font-weight: bold;">_</span>gt `pseq` <span style="color: green;">&#40;</span>sorted<span style="color: #339933; font-weight: bold;">_</span>lt <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#91;</span>x<span style="color: green;">&#93;</span> <span style="color: #339933; font-weight: bold;">++</span> sorted<span style="color: #339933; font-weight: bold;">_</span>gt<span style="color: green;">&#41;</span> <span style="color: #5d478b; font-style: italic;">----unbelieveable,isn't it? :&gt;</span>
 <span style="color: #06c; font-weight: bold;">where</span>
  sorted<span style="color: #339933; font-weight: bold;">_</span>lt <span style="color: #339933; font-weight: bold;">=</span> psort <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&lt;</span><span style="color: green;">&#41;</span> xs
  sorted<span style="color: #339933; font-weight: bold;">_</span>gt <span style="color: #339933; font-weight: bold;">=</span> psort <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="color: #339933; font-weight: bold;">&gt;=</span>x<span style="color: green;">&#41;</span> xs
&nbsp;
&nbsp;
main <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: green;">&#123;</span>
 list <span style="color: #339933; font-weight: bold;">&lt;-</span> <span style="font-weight: bold;">return</span> <span style="color: green;">&#91;</span><span style="color: red;">5000</span><span style="color: #339933; font-weight: bold;">,</span>4999<span style="color: #339933; font-weight: bold;">..</span>1<span style="color: green;">&#93;</span>;
 <span style="font-weight: bold;">print</span> <span style="color: #339933; font-weight: bold;">$</span> qsort list;
 <span style="font-weight: bold;">print</span> <span style="color: #339933; font-weight: bold;">$</span> psort list;
<span style="color: green;">&#125;</span></pre></div></div>

<p>profile下，给ghc添加一个编译选项 -prof -O：</p>
<pre>
ghc --make -prof -O -auto-all quicksort.hs
</pre>
<p>执行程序，加一个选项 +RTS -p，它会在本目录下生成一个quicksort.prof文件</p>
<pre>
quicksort +RTS -p
</pre>
<p>quicksort.prof文件的部分内容：</p>
<pre>
 Mon Jul 20 16:40 2009 Time and Allocation Profiling Report  (Final)

    quicksort +RTS -p -RTS

 total time  =        6.86 secs   (343 ticks @ 20 ms)
 total alloc = 1,401,627,416 bytes  (excludes profiling overheads)

COST CENTRE                    MODULE               %time %alloc

qsort                          Main                  69.1   49.9
psort                          Main                  30.9   49.9
</pre>
<p>可见在这台双核的机器上，性能提高了一半多 :)<br />
ps:测试的数据貌似不是很好（按说该用个随机数列），不过知道有这回事就行了~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/07/24/%e5%b9%b6%e8%a1%8c%e7%9a%84quicksort/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>王猫猫谈Monad</title>
		<link>http://www.fleurer-lee.com/2009/07/20/%e7%8e%8b%e7%8c%ab%e7%8c%ab%e8%b0%88monad/</link>
		<comments>http://www.fleurer-lee.com/2009/07/20/%e7%8e%8b%e7%8c%ab%e7%8c%ab%e8%b0%88monad/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 03:18:15 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[monad]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645307</guid>
		<description><![CDATA[
Feather  2009-07-19 21:46:08
世事恰如迷局, 寻人, 失散, 流落, 皈依, 纷乱无绪, 及至谜底解开, 那人却已站立在你面前.




	
	

Feather  2009-07-19 21:46:46
??


Feather  2009-07-19 21:46:50
继续讲么


Feather  2009-07-19 21:47:02
没了?


Fleurer  2009-07-19 21:47:08
别的不知道了&#8230;


Feather  2009-07-19 21:47:15
不要啊


Fleurer  2009-07-19 21:47:25



Feather  2009-07-19 21:47:24
我关于Monad 有一本笔记


Feather  2009-07-19 21:47:31
扔学校了


Fleurer  2009-07-19 21:47:40
拉门


Feather  2009-07-19 21:47:43
哈哈


Fleurer  2009-07-19 21:47:57
讲讲讲讲


Feather  2009-07-19 21:48:11
从哪开始


Feather  2009-07-19 21:48:16
你有离散数学基础没?


Fleurer  2009-07-19 21:48:28
貌似看过一点


Feather  [...]]]></description>
			<content:encoded><![CDATA[<blockquote><div>
<p class="friend-id">Feather  2009-07-19 21:46:08</p>
<p class="content">世事恰如迷局, 寻人, 失散, 流落, 皈依, 纷乱无绪, 及至谜底解开, 那人却已站立在你面前.</p>
</div>
</blockquote>
<p><span id="more-645307"></span></p>
<style type="text/css">
	<!--
	p{
		line-height:18px;
		font-size:14px;
	}
	p.content, p.system-content{
		padding-left:12px;
		word-wrap:break-word;
		word-break:break-all;
	}
	p.my-id{
		color:#008040;
	}
	p.friend-id{
		color:#00f;
	}
	p.system-id{
	    color:#6b6b6b;
	}
	h3#title {
		font-size:14px;
		font-weight:bold;
	}
	#chatinfo {
		clear:both;
		color:#808080;
		text-align:left;
		font-size: 80%;
	}
	#save {
		padding-left:20px;
	}
	#footer {
		padding-top:30px;
	}
	#footer img {
		border:0px;
	}
	-->
	</style>
<div>
<p class="friend-id">Feather  2009-07-19 21:46:46</p>
<p class="content">??</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:46:50</p>
<p class="content">继续讲么</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:47:02</p>
<p class="content">没了?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:47:08</p>
<p class="content">别的不知道了&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:47:15</p>
<p class="content"><img src="/images/Face2/10.gif" alt="" align="absmiddle" />不要啊</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:47:25</p>
<p class="content"><img src="/images/Face2/36.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:47:24</p>
<p class="content">我关于Monad 有一本笔记</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:47:31</p>
<p class="content">扔学校了</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:47:40</p>
<p class="content">拉门</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:47:43</p>
<p class="content">哈哈</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:47:57</p>
<p class="content">讲讲讲讲</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:48:11</p>
<p class="content">从哪开始</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:48:16</p>
<p class="content">你有离散数学基础没?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:48:28</p>
<p class="content">貌似看过一点</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:49:20</p>
<p class="content">哦</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:49:21</p>
<p class="content">那就好</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:49:25</p>
<p class="content">开始讲昂</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:49:34</p>
<p class="content"><img src="/images/Face2/0.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:49:48</p>
<p class="content">first</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:50:00</p>
<p class="content">let talk about some basic concepts</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:50:10</p>
<p class="content">ok</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:50:16</p>
<p class="content">what is type?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:50:21</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:50:35</p>
<p class="content">tell me what you think about type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:50:38</p>
<p class="content">&#8220;type&#8221;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:50:41</p>
<p class="content">what is it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:50:55</p>
<p class="content">emm&#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:51:02</p>
<p class="content">a system?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:51:59</p>
<p class="content">hold value&#8230;operation&#8230;and so &#8230; make program easier to be understood by machine?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:52:28</p>
<p class="content">ok~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:52:35</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:53:13</p>
<p class="content">you just give us the &#8216;Class/Instance&#8221; definition in haskell</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:53:41</p>
<p class="content">what&#8217;s more&#8230;<img src="/images/Face2/32.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:53:48</p>
<p class="content">no no no</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:53:56</p>
<p class="content">there&#8217;s no &#8220;what&#8217;s more&#8217;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:02</p>
<p class="content">but what&#8217;s less.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:10</p>
<p class="content">for short, a type is just a set</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:12</p>
<p class="content">set~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:14</p>
<p class="content">just set</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:16</p>
<p class="content">no more</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:54:19</p>
<p class="content">set~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:25</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:54:28</p>
<p class="content">set of integer</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:54:31</p>
<p class="content">set of string</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:32</p>
<p class="content">ya~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:35</p>
<p class="content">set of Monad</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:54:38</p>
<p class="content">haha ~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:55:01</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:55:35</p>
<p class="content">maybe mis the point , but Monad is a set of types?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:56:01</p>
<p class="content">forget my saying &#8220;set of Monad&#8221; first</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:56:16</p>
<p class="content">ramen</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:56:33</p>
<p class="content">ya</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:56:39</p>
<p class="content">plz go on :&gt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:56:46</p>
<p class="content">what is function?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:56:58</p>
<p class="content">emmm</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:57:08</p>
<p class="content">a map between sets?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:57:13</p>
<p class="content">D -&gt; R</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:57:25</p>
<p class="content">Int -&gt; String</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:57:42</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:57:43</p>
<p class="content">a set of combination (a,b)~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:57:45</p>
<p class="content">yes?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:58:02</p>
<p class="content">let&#8217;s take a simple e.g.</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:58:07</p>
<p class="content">Relation?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:58:08</p>
<p class="content">the function `inc`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:58:45</p>
<p class="content">for clear definithion of `function`, refer to some book</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:58:46</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:59:06</p>
<p class="content">inc = { &#8230;, (0,1), (1,2), (2,3)&#8230;..}</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:59:09</p>
<p class="content">yes?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:59:16</p>
<p class="content">so we give `inc 2`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:59:20</p>
<p class="content">we got 3</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 21:59:33</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 21:59:55</p>
<p class="content">lalala ~~~~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:00:12</p>
<p class="content">so?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:00:29</p>
<p class="content">so~ a monoid~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:00:35</p>
<p class="content">what is monoid</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:00:45</p>
<p class="content">monoid<img src="/images/Face2/32.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:00:45</p>
<p class="content">a set, whith some operation</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:01:18</p>
<p class="content">then what&#8217;s the difference between a monoid &amp; a function?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:01:37</p>
<p class="content">and difference between a monoid &amp; dict?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:01:43</p>
<p class="content">~~~~~~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:01:45</p>
<p class="content">wrong</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:01:54</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:01:55</p>
<p class="content">consider this</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:02:08</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:02:48</p>
<p class="content">a monoid is a set M, together with an operation &#8220;●&#8221; that combines any two elements a and b to form another element denoted a ● b.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:02:57</p>
<p class="content">formal definition here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:03:14</p>
<p class="content">● is called product</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:03:28</p>
<p class="content">multiply?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:05:09</p>
<p class="content">orz ,forget my last word</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:05:17</p>
<p class="content">sorry</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:05:18</p>
<p class="content">plz go on :&gt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:05:47</p>
<p class="content">the pc got slow&#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:05:53</p>
<p class="content">ya?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:05:56</p>
<p class="content">because i am compiling&#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:06:21</p>
<p class="content">compiling is ram hungry&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:06:28</p>
<p class="content">for e.g</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:06:34</p>
<p class="content">int, *</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:06:41</p>
<p class="content">in the set int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:06:48</p>
<p class="content">we define *</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:07:02</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:07:24</p>
<p class="content">here we can see what the monoid is</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:07:47</p>
<p class="content">3 important axioms</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:07:49</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:07:51</p>
<p class="content">1&gt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:07:54</p>
<p class="content">closure</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:08:05</p>
<p class="content">int * int is a int , not other thing</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:08:13</p>
<p class="content">2&gt; Associatiity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:09:09</p>
<p class="content">for int a,b,c</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:09:23</p>
<p class="content">(a*b)*c equals to a*(b*c)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:09:26</p>
<p class="content">see?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:09:33</p>
<p class="content">got it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:10:21</p>
<p class="content">3rd?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:10:21</p>
<p class="content">3&gt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:11:05</p>
<p class="content">the e, so called `one`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:11:21</p>
<p class="content">for any int a<br />
e * a = a * e = a</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:11:34</p>
<p class="content">note, my e.g. is not very good</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:12:14</p>
<p class="content">so e here is the identity element</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:12:35</p>
<p class="content">like 1 in Int?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:13:09</p>
<p class="content">yes</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:13:33</p>
<p class="content">linear?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:14:22</p>
<p class="content">[Int] is a Monoid</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:14:44</p>
<p class="content">the product is  ++</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:14:51</p>
<p class="content">the id is?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:14:54</p>
<p class="content">tell me</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:15:05</p>
<p class="content">[]?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:15:18</p>
<p class="content">yes~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:15:33</p>
<p class="content">so what is Functor</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:15:41</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:16:18</p>
<p class="content">&#8230;er&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:16:26</p>
<p class="content">not this fast</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:16:42</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:17:00</p>
<p class="content">first let&#8217;s talk about category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:17:52</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:18:17</p>
<p class="content">what is category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:18:23</p>
<p class="content">？</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:18:28</p>
<p class="content">so many whats&#8230; :)</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:19:01</p>
<p class="content">heihiehie</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:19:42</p>
<p class="content">now you know what monoid is</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:19:57</p>
<p class="content">let&#8217;s consider  category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:21:16</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:21:27</p>
<p class="content">so slow a computer is &#8230;.</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:21:43</p>
<p class="content">compiling eats computer&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:22:36</p>
<p class="content">a category&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:22:57</p>
<p class="content">=</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:23:22</p>
<p class="content">objects + arrows</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:23:25</p>
<p class="content">？</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:23:53</p>
<p class="content">what is arrow here?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:24:10</p>
<p class="content">-&gt; ?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:24:17</p>
<p class="content">fuck</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:24:22</p>
<p class="content">no haskell code here</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:24:42</p>
<p class="content">so &#8230; just an arrow?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:24:59</p>
<p class="content">haha ~ good</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:25:06</p>
<p class="content">it is &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:25:17</p>
<p class="content">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:25:30</p>
<p class="content">arrow is just an arrow from an object to an object</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:25:40</p>
<p class="content">map?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:25:43</p>
<p class="content">consider this,</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:25:55</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:26:32</p>
<p class="content">objects = 1,2,3,4,5,6&#8230;.</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:26:50</p>
<p class="content">an infinite set?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:27:10</p>
<p class="content">arrow = 1-&gt;2, 3-&gt;3, 4-&gt;5, 5-&gt;6</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:27:20</p>
<p class="content">call it whatever you like ~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:27:31</p>
<p class="content">they are objects</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:27:43</p>
<p class="content">and wo got arrows 1-&gt;2, 3-&gt;3, 4-&gt;5, 5-&gt;6 &#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:27:50</p>
<p class="content">er&#8230;. so &#8230;. map among themselves?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:28:02</p>
<p class="content">understand what object and arrow is?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:28:25</p>
<p class="content">here we define an action~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:28:28</p>
<p class="content">coposite</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:28:30</p>
<p class="content">yea&#8230;. maybe</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:28:43</p>
<p class="content">composite, fuck , spell &#8230;.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:29:23</p>
<p class="content">objects = 1,2,3,4,5,6&#8230;.<br />
arrows 1-&gt;2, 3-&gt;3, 4-&gt;5, 5-&gt;6 &#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:29:37</p>
<p class="content">so ?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:30:24</p>
<p class="content">(1-2)◎(2-&gt;3)    we got   1-&gt;3</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:30:28</p>
<p class="content">haha ~ see?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:30:34</p>
<p class="content">this is composite</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:31:28</p>
<p class="content">like . in haskell?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:31:43</p>
<p class="content">fuck, i said no more haskell code</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:31:52</p>
<p class="content">ramen</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:31:57</p>
<p class="content">it is composite in category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:31:58</p>
<p class="content">here</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:32:09</p>
<p class="content">so &#8230; composite makes a link?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:32:13</p>
<p class="content">(1-2)◎(2-&gt;3) ~ this is composite</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:33:17</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:34:28</p>
<p class="content">((1-2)◎(2-&gt;3))◎(3-&gt;4)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:34:35</p>
<p class="content">what is it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:34:47</p>
<p class="content">two composites?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:03</p>
<p class="content">and compare with</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:04</p>
<p class="content">(1-2)◎( (2-&gt;3)◎(3-&gt;4) )</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:35:27</p>
<p class="content">they equal?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:31</p>
<p class="content">yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:39</p>
<p class="content">so recall what monoid is</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:35:43</p>
<p class="content">assoc</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:49</p>
<p class="content">this is called~ associativity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:50</p>
<p class="content">yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:53</p>
<p class="content">clever</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:55</p>
<p class="content">~!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:35:59</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:36:01</p>
<p class="content">orz, i can&#8217;t recall the word..窘</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:36:26</p>
<p class="content">we have assoc&#8230; here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:37:22</p>
<p class="content">and for every object</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:37:27</p>
<p class="content">we define</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:37:34</p>
<p class="content">ye？</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:37:36</p>
<p class="content">for every object  a</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:37:44</p>
<p class="content">we define Ia</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:38:06</p>
<p class="content">to identify itself?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:38:37</p>
<p class="content">I3 ◎ (3-&gt;2) ====== (3-&gt;2)◎I3 ======= (3-&gt;2)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:39:06</p>
<p class="content">we also have I1, I2,  I3, Ix&#8230;..</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:39:11</p>
<p class="content">a start point ?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:39:23</p>
<p class="content">this is called identity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:39:30</p>
<p class="content">identity in ◎</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:40:22</p>
<p class="content">I3 ◎ (3-&gt;2) ====== (3-&gt;2)◎I2 ======= (3-&gt;2)</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:40:28</p>
<p class="content">oh ,got it . like I3, identify this object is 3?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:40:50</p>
<p class="content">I3 * (3 -&gt; x) ====== =3-&gt;x</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:41:01</p>
<p class="content">here we use ints as objects</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:41:23</p>
<p class="content">yeah?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:41:41</p>
<p class="content">use `identity arrow`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:41:54</p>
<p class="content">composite another arrow</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:41:59</p>
<p class="content">what we got?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:42:08</p>
<p class="content">a link?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:09</p>
<p class="content">the arrow unchanged</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:11</p>
<p class="content">fuck</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:35</p>
<p class="content">we talk about arrow</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:42:42</p>
<p class="content">窘</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:43</p>
<p class="content">why you always link, link, link</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:50</p>
<p class="content">what do you want to link?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:42:54</p>
<p class="content">spring brother?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:43:10</p>
<p class="content">BS</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:43:13</p>
<p class="content">ramen, i&#8217;ve made a mistake</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:43:20</p>
<p class="content">let&#8217;s go on</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:43:23</p>
<p class="content">category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:43:28</p>
<p class="content">never link anymore</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:43:28</p>
<p class="content">understand it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:43:35</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:43:51</p>
<p class="content">another e.g.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:44:14</p>
<p class="content">objects :       a, b, c<br />
arrows:     a-&gt;b,  b-&gt;c, a-&gt;c</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:44:35</p>
<p class="content">(a-&gt;b) ◎ (b-&gt;c)  ==========(a-&gt;c)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:44:53</p>
<p class="content">note here, in math ◎ is not the  . in haskell</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:45:02</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:45:03</p>
<p class="content">the operator order is different</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:45:18</p>
<p class="content">go on</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:45:25</p>
<p class="content">objects :       a, b, c<br />
arrows:     a-&gt;b,  b-&gt;c, a-&gt;c</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:45:41</p>
<p class="content">what else we need to make it a category?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:45:55</p>
<p class="content">answer my question</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:46:15</p>
<p class="content">er&#8230;morsphy or what&#8217;s the word called?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:47:05</p>
<p class="content">morphism</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:47:06</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:47:09</p>
<p class="content">is this word?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:47:14</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:47:18</p>
<p class="content">answer my question</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:47:32</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:47:49</p>
<p class="content">objects :       a, b, c<br />
arrows:     a-&gt;b,  b-&gt;c, a-&gt;c<br />
what else we need to make it a category?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:48:28</p>
<p class="content">could not tell that&#8230;orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:48:51</p>
<p class="content">recall what i told you</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:49:04</p>
<p class="content">objects, arrows, associativity, identity</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:49:09</p>
<p class="content">er&#8230;.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:49:09</p>
<p class="content">which?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:49:21</p>
<p class="content">associativity?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:49:38</p>
<p class="content">since we have a-&gt;b,  b-&gt;c, a-&gt;c</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:49:55</p>
<p class="content">we alreay got associativity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:50:08</p>
<p class="content">what we really need here is identity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:50:22</p>
<p class="content">we have no identity arrows for  a,b,c</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:50:23</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:50:24</p>
<p class="content">right?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:50:25</p>
<p class="content">see?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:50:28</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:50:34</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:51:12</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:51:57</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:52:09</p>
<p class="content">hehe</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:52:11</p>
<p class="content">next</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:52:20</p>
<p class="content">we have category here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:52:21</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:52:35</p>
<p class="content"><img src="/images/Face2/30.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:53:36</p>
<p class="content">so how?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:53:36</p>
<p class="content">in haskell ,<br />
{id, read, show, Int, Char }</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:53:43</p>
<p class="content">is a category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:53:55</p>
<p class="content">objects : Int, Char</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:53:59</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:54:08</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:08</p>
<p class="content">Char -&gt; String</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:13</p>
<p class="content">not char</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:17</p>
<p class="content">it&#8217;s string</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:18</p>
<p class="content">sorry</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:22</p>
<p class="content">mistake here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:24</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:54:25</p>
<p class="content">got it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:26</p>
<p class="content">forgive me</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:54:42</p>
<p class="content"><img src="/images/Face2/0.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:54:55</p>
<p class="content">why it is a category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:55:04</p>
<p class="content">{id, read, show, Int, String }</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:55:10</p>
<p class="content">yeah</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:55:21</p>
<p class="content">object : Int , String</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:55:27</p>
<p class="content">yes yes</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:55:30</p>
<p class="content">arrows: read ,show</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:55:36</p>
<p class="content">no no</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:55:38</p>
<p class="content">id: identifier</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:55:44</p>
<p class="content"><img src="/images/Face2/1.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:55:47</p>
<p class="content">arrows contains identity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:55:55</p>
<p class="content">so just put id in arrows</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:56:12</p>
<p class="content">what you said is right too</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:56:16</p>
<p class="content">hehe</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:56:21</p>
<p class="content">y<img src="/images/Face2/13.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:56:47</p>
<p class="content">so?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:57:14</p>
<p class="content">so you&#8217;ve mastered category more or less</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:57:30</p>
<p class="content">oui?<img src="/images/Face2/32.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:57:33</p>
<p class="content">arrows: read ,show, id ~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:57:49</p>
<p class="content">whats the type of them</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:57:59</p>
<p class="content">read :: String -&gt; Int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:05</p>
<p class="content">show :: Int -&gt; String</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:58:13</p>
<p class="content">id :: a-&gt;a?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:14</p>
<p class="content">what is `id`?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:16</p>
<p class="content">fuck</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:58:28</p>
<p class="content">orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:34</p>
<p class="content">I said what? for every object, there is &#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:37</p>
<p class="content">so</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:45</p>
<p class="content">id(int) :: Int -&gt; Int</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:58:51</p>
<p class="content">T_T</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:53</p>
<p class="content">id(string) :: String-&gt; String</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:58:55</p>
<p class="content">哈哈</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:04</p>
<p class="content">GO ON bs</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 22:59:10</p>
<p class="content">jiong</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:18</p>
<p class="content">did you  get it?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:21</p>
<p class="content">I mean</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:34</p>
<p class="content">identity is many arrows, not a single arrow</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:52</p>
<p class="content">in haskell, we use id::a-&gt;a to name every identity arrows</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 22:59:56</p>
<p class="content">but in math</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:00:01</p>
<p class="content">emm, id is closed in this category?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:00:00</p>
<p class="content">this is different</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:00:17</p>
<p class="content">all arrows must closed in category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:00:44</p>
<p class="content">got it <img src="/images/Face2/13.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:00:54</p>
<p class="content">you can&#8217;t use arrow to form another object which is not in the objects</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:04</p>
<p class="content">clever</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:06</p>
<p class="content">next</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:12</p>
<p class="content">a great thing</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:01:18</p>
<p class="content">oui!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:22</p>
<p class="content">Functor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:44</p>
<p class="content">Functor is what?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:47</p>
<p class="content">another what~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:01:48</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:02:02</p>
<p class="content">ramen</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:02:59</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:03:14</p>
<p class="content">functor is a morphism from category to category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:03:24</p>
<p class="content"><img src="/images/Face2/32.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:03:42</p>
<p class="content">how?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:03:46</p>
<p class="content">easy</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:03:53</p>
<p class="content">:D</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:04:17</p>
<p class="content">(2009-07-19 22:47:56)   Feather(85660100)<br />
objects :       a, b, c<br />
arrows:     a-&gt;b,  b-&gt;c, a-&gt;c , and its ids~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:04:49</p>
<p class="content">we invent a functor F</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:04:58</p>
<p class="content">F must do 2 things</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:05:19</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:05:21</p>
<p class="content">for e.g. F :: Category A -&gt; Category B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:05:38</p>
<p class="content">F must transform objects in A to objects in B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:05:47</p>
<p class="content">and arrows in A to arrows in B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:05:50</p>
<p class="content">right?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:06:00</p>
<p class="content">because functor is a morphism from category to category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:06:17</p>
<p class="content">yeah</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:06:23</p>
<p class="content">but how?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:06:31</p>
<p class="content">how to transform both?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:06:36</p>
<p class="content">objects :       a, b, c<br />
arrows:     a-&gt;b,  b-&gt;c, a-&gt;c , and its ids~<br />
we name it to `A`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:06:55</p>
<p class="content">then we define category B</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:07:02</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:07:08</p>
<p class="content">object : d<br />
arrow : d-&gt;d</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:07:38</p>
<p class="content">a super monad isn&#8217;t it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:07:47</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:07:52</p>
<p class="content">so F :: Cat A -&gt; Cat B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:08:20</p>
<p class="content">just transform all objects, a,b,c to d<br />
all arrows x-&gt;x to a single d-&gt;d</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:08:34</p>
<p class="content">wait &#8230;.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:08:36</p>
<p class="content">then we got F, and implement it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:08:57</p>
<p class="content">bind :: M a -&gt; M b</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:09:12</p>
<p class="content">fuck, no more haskell code here</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:09:15</p>
<p class="content">orz, forget it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:09:22</p>
<p class="content">fuck to to death</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:09:26</p>
<p class="content">plz go &amp; on</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:09:39</p>
<p class="content">orz orz . i &#8216;ve made a silly mistake</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:09:51</p>
<p class="content">no more no more any</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:09:55</p>
<p class="content">bind is not Functor</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:10:09</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:10:15</p>
<p class="content">now, have you mastered F :: Category A -&gt; Category B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:10:22</p>
<p class="content">it is a Functor</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:10:23</p>
<p class="content">^_^</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:10:40</p>
<p class="content">you can easily prove it ,</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:10:51</p>
<p class="content">noice that</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:11:14</p>
<p class="content">here. a functor preseve identity</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:11:30</p>
<p class="content"><img src="/images/Face2/32.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:11:45</p>
<p class="content">just F :: Category A -&gt; Category B , we transform all arrows to the id(d)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:11:52</p>
<p class="content">so identity preseves</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:12:13</p>
<p class="content">if more arrows and more objects here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:12:39</p>
<p class="content">F will transform any id in A into id in B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:12:50</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:13:18</p>
<p class="content">emm&#8230;.</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:14:09</p>
<p class="content">&#8216;ve got what it is. but still couldn&#8217;t get how&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:14:45</p>
<p class="content">F(a-&gt;b) ◎ F(b-&gt;c)    =====   F ( (a-&gt;b)◎(b-&gt;c) )</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:14:46</p>
<p class="content">first</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:15:08</p>
<p class="content">it preserves composition</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:15:11</p>
<p class="content">and identity</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:16:01</p>
<p class="content">preserves&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:16:19</p>
<p class="content">F( id(a) ◎ F(a-&gt;c) )  =====   id(d)  ◎  F( (a-&gt;c) )</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:16:48</p>
<p class="content">F( id(a) ◎ F(a-&gt;c) )  =====   id(d)  ◎  F( (a-&gt;c) )    ======= F( a-&gt; c ) ==== d-&gt;d</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:17:26</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:17:34</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:17:50</p>
<p class="content">not very</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:18:04</p>
<p class="content">oh silly am I</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:18:09</p>
<p class="content">Functor is a transformation</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:18:18</p>
<p class="content">from a category to another category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:18:22</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:18:29</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:18:40</p>
<p class="content">and we know that category have objects, arrows, ids, compostions</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:18:51</p>
<p class="content">so when transformming</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:19:13</p>
<p class="content">the result must satisfy with these</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:19:25</p>
<p class="content">also have objects, arrows, ids, compostions</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:19:35</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:20:14</p>
<p class="content">F(a-&gt;b) ◎ F(b-&gt;c)    =====   F ( (a-&gt;b)◎(b-&gt;c) )<br />
when we have this, we can prove all arrow transform preserve compostion law</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:20:15</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:20:33</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:20:45</p>
<p class="content">F( id(a) ◎ F(a-&gt;c) )  =====   id(d)  ◎  F( (a-&gt;c) )    ======= F( a-&gt; c ) ==== d-&gt;d<br />
and with this low</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:21:01</p>
<p class="content">all identity preserves</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:21:10</p>
<p class="content">because my e.g. is too simple</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:21:24</p>
<p class="content">F( id(a) ◎ F(a-&gt;c) )  =====   id(d)  ◎  F( (a-&gt;c) )</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:21:26</p>
<p class="content">got it partly</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:21:27</p>
<p class="content">just this</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:21:33</p>
<p class="content">F( id(a) ◎ F(a-&gt;c) )  =====   id(d)  ◎  F( (a-&gt;c) )</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:22:04</p>
<p class="content">oui!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:22:05</p>
<p class="content">you can see that F will got change identity</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:22:21</p>
<p class="content">transform an id we got id in another category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:22:23</p>
<p class="content">right?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:22:26</p>
<p class="content">got it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:22:35</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:22:58</p>
<p class="content">no deep understanding~ just make sence of it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:23:12</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:23:29</p>
<p class="content">ok~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:23:35</p>
<p class="content">we got to funcor now</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:23:44</p>
<p class="content">oui</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:23:49</p>
<p class="content">so many ouis</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:23:49</p>
<p class="content">and the greatest and most powerful</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:23:55</p>
<p class="content">mo&#8230;.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:23:56</p>
<p class="content">the Monad~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:23:58</p>
<p class="content">yes</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:24:02</p>
<p class="content">yei!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:24:02</p>
<p class="content">what is Monad~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:24:15</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:24:15</p>
<p class="content">it&#8217;s the most fucking question</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:24:18</p>
<p class="content">right?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:24:19</p>
<p class="content">hehe</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:24:32</p>
<p class="content"><img src="/images/Face2/36.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:24:51</p>
<p class="content">so, remember~ I said to you that~ Monad is just Functor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:25:23</p>
<p class="content">here no need to think it in haskell method~ just remember</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:25:42</p>
<p class="content">F :: Cat A -&gt; Cat B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:25:44</p>
<p class="content">Monad is also a transform from category to another category&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:25:46</p>
<p class="content">yes yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:25:49</p>
<p class="content">recall it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:00</p>
<p class="content">and then I will tell you more</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:26:09</p>
<p class="content">A has objects &amp; arrows</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:10</p>
<p class="content">F :: Cat A -&gt; Cat B is a Functor</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:26:18</p>
<p class="content">transfrom it into B</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:25</p>
<p class="content">OK,~ let&#8217;s begin</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:26:36</p>
<p class="content">ya</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:38</p>
<p class="content">F :: Cat A -&gt; Cat B is a Functor , but we cam&#8217;t treat it as a monad</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:43</p>
<p class="content">what is Monad~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:49</p>
<p class="content">A endofunctor</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:26:56</p>
<p class="content">endo?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:26:56</p>
<p class="content">what is endofunctor~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:27:06</p>
<p class="content">F :: Cat A -&gt; Cat A is endofunctor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:27:11</p>
<p class="content">got it?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:27:18</p>
<p class="content">transform it to itself</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:27:19</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:27:44</p>
<p class="content">oui, i&#8217;ve got the difference&#8230;maybe</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:27:51</p>
<p class="content">what&#8217;s more</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:09</p>
<p class="content">don&#8217;t worry, later i&#8217;ll show you how</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:11</p>
<p class="content">and why</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:28:21</p>
<p class="content">:)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:28</p>
<p class="content">endofunctor is a functor from cat A to cat A</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:32</p>
<p class="content">the same Category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:45</p>
<p class="content">A monad is an endofunctor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:28:50</p>
<p class="content">but not so simple</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:28:54</p>
<p class="content">so ?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:29:19</p>
<p class="content">with 2 function</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:29:29</p>
<p class="content">bind return?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:29:36</p>
<p class="content">or you can call the 2 function `natural transformaton`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:29:37</p>
<p class="content">fuck</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:29:43</p>
<p class="content">orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:29:44</p>
<p class="content">no any haskell code</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:29:55</p>
<p class="content">no any more</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:30:09</p>
<p class="content">μ η</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:30:16</p>
<p class="content">orz</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:30:23</p>
<p class="content">holy GREEK</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:30:32</p>
<p class="content">haha~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:30:43</p>
<p class="content">I&#8217;ll not use μ η here</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:30:58</p>
<p class="content">thanks Spring brother</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:31:42</p>
<p class="content">we define these</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:32:39</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:34:38</p>
<p class="content">~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:34:45</p>
<p class="content">here</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:34:48</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:34:49</p>
<p class="content">let&#8217;s begin</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:34:57</p>
<p class="content">two function~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:34:58</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:35:14</p>
<p class="content">unit,  and  join</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:35:28</p>
<p class="content">much better names</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:35:55</p>
<p class="content">I think we can go back to Haskell</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:36:05</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:36:16</p>
<p class="content">what is unit and join? leave it unsolved</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:36:30</p>
<p class="content">ok</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:36:32</p>
<p class="content">answer my question, what is Functor in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:36:42</p>
<p class="content">we now talk Haskell code</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:36:43</p>
<p class="content">monad?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:36:52</p>
<p class="content">orz</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:36:57</p>
<p class="content">a class</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:36:57</p>
<p class="content">what is Functor in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:00</p>
<p class="content">yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:04</p>
<p class="content">what class</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:37:06</p>
<p class="content">class Functor where<br />
fmap</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:12</p>
<p class="content">yes ~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:37:14</p>
<p class="content">just a fmap?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:19</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:25</p>
<p class="content">you feel strange</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:37:36</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:40</p>
<p class="content">why it is so different from our math definition~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:37:44</p>
<p class="content">is it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:37:57</p>
<p class="content">yes!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:38:08</p>
<p class="content">recall~ Functor here</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:38:11</p>
<p class="content">a Functor&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:38:18</p>
<p class="content">transfomr arrows, objects</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:38:24</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:38:32</p>
<p class="content">so what is the type of fmap</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:39:01</p>
<p class="content">just give me haskell code</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:39:06</p>
<p class="content">fmap :: (a-&gt;b) -&gt;M a -&gt; M b</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:39:09</p>
<p class="content">yes~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:39:20</p>
<p class="content">you can see</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:39:31</p>
<p class="content">is just transform arrows</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:39:34</p>
<p class="content">it is?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:40:01</p>
<p class="content">arrows?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:40:04</p>
<p class="content">By the way ~ do you know what is the category in haskell ?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:40:19</p>
<p class="content">oh no</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:40:25</p>
<p class="content">fmap just transform arrows</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:40:32</p>
<p class="content">itn&#8217;t it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:40:51</p>
<p class="content">arrows&#8230;.</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:01</p>
<p class="content">that is functions in haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:06</p>
<p class="content">just functions</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:07</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:23</p>
<p class="content">what is the category in haskell ?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:41:25</p>
<p class="content">but &#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:33</p>
<p class="content">we have Functor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:41</p>
<p class="content">but what is the category?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:41:50</p>
<p class="content">haha ~ do you want to ask this?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:41:51</p>
<p class="content">orz, monad?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:42:40</p>
<p class="content">when we talk Functor, we must have to categories. yes?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:43:17</p>
<p class="content">yes, but this Functor is NOT that functor?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:43:24</p>
<p class="content">no no</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:43:33</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:43:34</p>
<p class="content">haskell is very math-strict</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:43:53</p>
<p class="content">Functor in haskell is Functor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:02</p>
<p class="content">remeber this:</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:44:07</p>
<p class="content">?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:20</p>
<p class="content">in haskell what we working on is a big category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:26</p>
<p class="content">we call it H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:29</p>
<p class="content">`H`</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:44:37</p>
<p class="content">wow</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:42</p>
<p class="content">it objects is all types in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:44:53</p>
<p class="content">it arrows is all functions in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:06</p>
<p class="content">its identiry is the super function id</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:45:17</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:21</p>
<p class="content">id: a-&gt;a, so we have all identiry form it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:26</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:45:32</p>
<p class="content">got it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:33</p>
<p class="content">so ~ so~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:38</p>
<p class="content">fmap</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:45:47</p>
<p class="content">fmap :: (a-&gt;b) -&gt;M a -&gt; M b</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:46:11</p>
<p class="content">tansform a function a-&gt; b to a function in (M H)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:46:16</p>
<p class="content">isn&#8217;t it?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:46:22</p>
<p class="content">we just call it M H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:46:50</p>
<p class="content">a -&gt; b is in the category H<br />
M a -&gt; M b in (M H)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:46:56</p>
<p class="content">am I right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:47:34</p>
<p class="content">the category changed into H?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:47:55</p>
<p class="content">H is the global haskell category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:48:05</p>
<p class="content">so a-&gt;a function(arrow) in in it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:48:20</p>
<p class="content">and we wrap it in (M H) category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:48:37</p>
<p class="content">oui, catch it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:48:42</p>
<p class="content">notice that type is object</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:49:03</p>
<p class="content">arrow from object to object, ~ just from type to type, haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:49:15</p>
<p class="content">:D</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:49:24</p>
<p class="content">so by using fmap, we transform all arrows(functions)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:49:28</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:49:43</p>
<p class="content">my mind was brighted :D</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:49:50</p>
<p class="content">but</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:49:59</p>
<p class="content">the object transformation?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:50:05</p>
<p class="content">what is it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:50:11</p>
<p class="content">oui , that&#8217;s it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:50:27</p>
<p class="content">so it comes bind and return ?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:50:35</p>
<p class="content">in haskell&#8217;s Functor definition.. there&#8217;s no object transformation</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:50:37</p>
<p class="content">fuck</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:50:42</p>
<p class="content">orz</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:50:46</p>
<p class="content">forget it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:50:48</p>
<p class="content">what did I say</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:50:54</p>
<p class="content">arrow, from type to type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:51:01</p>
<p class="content">object , is type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:51:13</p>
<p class="content">so transform object is transform type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:51:20</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:51:24</p>
<p class="content">got it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:51:48</p>
<p class="content">fmap :: (a-&gt;b) -&gt;M a -&gt; M b<br />
fuck this type definition carefully</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:52:01</p>
<p class="content">the big `M` is what?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:52:05</p>
<p class="content">orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:52:13</p>
<p class="content">isn&#8217;t it what we want</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:52:21</p>
<p class="content">Int -&gt; M Int</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:52:25</p>
<p class="content">MMMonad</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:52:38</p>
<p class="content">M just transform the type to another type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:52:42</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:52:49</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:03</p>
<p class="content">so I said, M is type constructor in haskell, it transforms the object</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:14</p>
<p class="content">that is to say, transforms the type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:15</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:20</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:53:22</p>
<p class="content">orz, return comes into my mind again</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:43</p>
<p class="content">return is just a single function, from a value to another value</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:53:52</p>
<p class="content">not Functor transformation</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:53:57</p>
<p class="content">oui, rememberd</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:05</p>
<p class="content">haha, so return is not</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:54:12</p>
<p class="content">what we need is a type constructor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:13</p>
<p class="content">it is the big M</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:15</p>
<p class="content">yes</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:54:17</p>
<p class="content">not a function</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:35</p>
<p class="content">function can only transform a value</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:39</p>
<p class="content">not a whole type</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:54:44</p>
<p class="content">got it?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:55:03</p>
<p class="content">so for begginers, the can&#8217;t tell from return and the big `M`</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:55:12</p>
<p class="content">but type constructor can do the transformation between types &#8212; so as objects</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:55:27</p>
<p class="content">so for e.g</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:55:33</p>
<p class="content">:D</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:55:39</p>
<p class="content">from Int to Maybe Int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:55:51</p>
<p class="content">how can we translate Int to Maybe Int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:55:59</p>
<p class="content">it is the Type Constructor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:56:03</p>
<p class="content">`Maybe`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:56:06</p>
<p class="content">not return</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:56:13</p>
<p class="content">yay</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:56:16</p>
<p class="content">return Int ??? fuck this~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:56:22</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:56:25</p>
<p class="content">silly</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:56:34</p>
<p class="content">object ~ type~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:56:45</p>
<p class="content">remeber, type is just sets</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:57:02</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:57:06</p>
<p class="content">type Int is just {&#8230;.-1, 0, 1,2, 3&#8230;}</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:57:21</p>
<p class="content">understand the whole fucking thing?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:57:23</p>
<p class="content">haha, just the same as you said</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:57:53</p>
<p class="content">so Functor in Haskell is just simple Functor~ isn&#8217;t~?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:58:14</p>
<p class="content">ya, haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:58:29</p>
<p class="content">haha~ let go on our Monad trip</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:58:38</p>
<p class="content">unit~ join</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:58:42</p>
<p class="content">:D</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:58:45</p>
<p class="content">unit is what?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:58:54</p>
<p class="content">unit :: a -&gt; M a</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:58:59</p>
<p class="content">haha~ what is it?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:59:01</p>
<p class="content">emmm</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:59:11</p>
<p class="content">so finally it comes to return!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:11</p>
<p class="content">u know it~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:14</p>
<p class="content">yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:18</p>
<p class="content">and the join</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:59:26</p>
<p class="content">bind</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:27</p>
<p class="content">fuck it ~ its not the bind</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:43</p>
<p class="content">join is strange</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-19 23:59:55</p>
<p class="content">join :: M (M a) -&gt; M a</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-19 23:59:59</p>
<p class="content">orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:00:05</p>
<p class="content">strange enough?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:00:12</p>
<p class="content">oui</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:00:22</p>
<p class="content">forget about bind first</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:00:26</p>
<p class="content">it unwraps?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:00:30</p>
<p class="content">yes</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:00:33</p>
<p class="content">unwrap~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:00:34</p>
<p class="content">haha</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:01:07</p>
<p class="content">so?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:01:06</p>
<p class="content">so with monad , these 2 super function(natual transformation)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:01:09</p>
<p class="content">we can</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:01:35</p>
<p class="content">put haskell values into a new Category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:01:51</p>
<p class="content">wow</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:02</p>
<p class="content">and with join</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:25</p>
<p class="content">we can extract</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:33</p>
<p class="content">unwrap</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:02:41</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:44</p>
<p class="content">now let&#8217;s fuck the `bind`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:51</p>
<p class="content">where is bind??</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:02:52</p>
<p class="content">where?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:02:56</p>
<p class="content">okay &#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:03:14</p>
<p class="content">(&gt;&gt;=) :: M a -&gt; (a -&gt; M b) -&gt; M b</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:03:29</p>
<p class="content">bind :: M a -&gt; (a -&gt; M b) -&gt; M b</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:04:25</p>
<p class="content">with join comes to bind?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:04:33</p>
<p class="content">bind a f   = join (fmap f  a)</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:04:43</p>
<p class="content">WOW!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:04:43</p>
<p class="content">think over about it, I won&#8217;t tell you.</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:04:58</p>
<p class="content">i was shocked , to tell you the truth</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:04</p>
<p class="content">if you can calculate the result type youself~ you&#8217;ve know the whole thing~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:15</p>
<p class="content">bind a f   = join (fmap f  a)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:24</p>
<p class="content">remember this</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:37</p>
<p class="content">for Monad is just Functor ~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:43</p>
<p class="content">we can use fmap on it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:49</p>
<p class="content">haha~~ wonderful~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:05:52</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:05:57</p>
<p class="content">per-fect</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:06:09</p>
<p class="content">so what Monad does~?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:06:34</p>
<p class="content">so what is `M`  really means</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:06:40</p>
<p class="content">haha~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:06:58</p>
<p class="content">just I told you Monad is endofunctor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:07:08</p>
<p class="content">but~ have you ever noticed that</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:07:14</p>
<p class="content">it is not endo?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:07:28</p>
<p class="content">what is endo? recall it</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:07:45</p>
<p class="content">endo&#8230;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:08:03</p>
<p class="content">map it to itself?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:08:14</p>
<p class="content">F :: M A -&gt; M A</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:09:09</p>
<p class="content">haha~ what did I said</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:09:17</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:11:10</p>
<p class="content">Feather 23:44:26<br />
in haskell what we working on is a big category</p>
<p>Feather 23:44:33<br />
we call it H</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:11:27</p>
<p class="content">the big category</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:11:47</p>
<p class="content">how big?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:11:50</p>
<p class="content">very very big</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:11:57</p>
<p class="content">any thing inside?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:01</p>
<p class="content">it objects is all types in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:05</p>
<p class="content">all types ~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:14</p>
<p class="content">so :</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:17</p>
<p class="content">Maybe Int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:25</p>
<p class="content">Maybe (Maybe Int)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:30</p>
<p class="content">IO Char</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:12:43</p>
<p class="content">are small categorys?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:51</p>
<p class="content">are just object in H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:12:57</p>
<p class="content">because they are types</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:03</p>
<p class="content">think it over</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:09</p>
<p class="content">it is very abstract</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:13:11</p>
<p class="content">oui, i &#8216;ve mistake again</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:19</p>
<p class="content">the big category H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:28</p>
<p class="content">it objects is all types in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:35</p>
<p class="content">I already told you</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:13:38</p>
<p class="content">all types~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:13:59</p>
<p class="content">i mean , the monads like Maybe, List IO , ande etc are &#8217;small&#8217; categories inside the big H?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:05</p>
<p class="content">fuck</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:14:14</p>
<p class="content">orz</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:16</p>
<p class="content">are objects in big H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:27</p>
<p class="content">there&#8217;s no small categories</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:34</p>
<p class="content">just a big `H`</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:14:36</p>
<p class="content">窘</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:41</p>
<p class="content">it objects is all types in Haskell</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:14:48</p>
<p class="content">i see</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:49</p>
<p class="content">what did I mean in `all`</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:14:55</p>
<p class="content">so ~ so ~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:14:59</p>
<p class="content">the only category</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:15:01</p>
<p class="content">so endo</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:06</p>
<p class="content">you don&#8217;t understand the bind</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:18</p>
<p class="content">bind a f   = join (fmap f  a)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:25</p>
<p class="content">what fmap does</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:39</p>
<p class="content">fmap f :: M a -&gt; M (M b)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:42</p>
<p class="content">right?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:15:58</p>
<p class="content">so M (M b) is an object here~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:16:05</p>
<p class="content">haha~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:16:07</p>
<p class="content">en&#8230;&#8230;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:16:14</p>
<p class="content">remember the big category H</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:16:22</p>
<p class="content">and I&#8217;ll show you more</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:16:35</p>
<p class="content">so tell me, what is big category H</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:16:52</p>
<p class="content">all abstract types</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:16:56</p>
<p class="content">all functions</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:17:03</p>
<p class="content">in haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:17:06</p>
<p class="content">and the id</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:17:09</p>
<p class="content">right?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:17:13</p>
<p class="content">yeah</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:17:29</p>
<p class="content">haha~ not that easy</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:17:36</p>
<p class="content">haskell is very math-strict</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:17:45</p>
<p class="content">oui?</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:17:50</p>
<p class="content">so when I use<br />
(+) :: Int -&gt; Int -&gt; Int</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:18:08</p>
<p class="content">it is an arrow form object Int to object (Int -&gt; Int)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:18:25</p>
<p class="content">so ~~ all haskell function are also objects~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:18:32</p>
<p class="content">because they are types</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:18:36</p>
<p class="content">haha ~~~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:18:45</p>
<p class="content">-&gt; is also type constructor</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:19:00</p>
<p class="content">if you want to understand monad~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:19:19</p>
<p class="content">so why some say  ((-&gt;) a)) is Monad~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:19:51</p>
<p class="content">understand???</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:20:15</p>
<p class="content">monad arises everywhere &gt;&lt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:20:28</p>
<p class="content">so ~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:20:30</p>
<p class="content">so ~~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:20:53</p>
<p class="content">big category H is horriable</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:21:47</p>
<p class="content">&gt;&lt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:22:10</p>
<p class="content">so why monad State can read/write/modify state~<br />
because it transform a single type a to a function s -&gt; (s, a)</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:22:58</p>
<p class="content">a function application is a state</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:23:17</p>
<p class="content">so that when pass it a state s, it value~ that is `what the function` does changes thouhe the monad calculation</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:23:37</p>
<p class="content">so that when pass it a state s, it value~ that is `what the function does` changes though the monad calculation</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:23:59</p>
<p class="content">then at last the return value and the final state returned~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:24:22</p>
<p class="content">by this way ~ we implemented state in functional programming</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:24:26</p>
<p class="content">understand?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:24:57</p>
<p class="content">horrible</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:25:29</p>
<p class="content">mathmaticians are all talents &gt;&lt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:25:35</p>
<p class="content">haha~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:25:43</p>
<p class="content">no need to understand it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:25:46</p>
<p class="content">just use~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:26:25</p>
<p class="content">do you understand what I told you today?</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:26:54</p>
<p class="content">not all, but much more delighted</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:27:57</p>
<p class="content">hehe~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:09</p>
<p class="content">enough for daily use</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:28:16</p>
<p class="content">thank you so much, never had i get know how Category comes to monad</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:33</p>
<p class="content">and what they are in Haskell</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:34</p>
<p class="content">haha~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:28:39</p>
<p class="content"><img src="/images/Face2/0.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:41</p>
<p class="content">haha~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:47</p>
<p class="content">and at last</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:28:51</p>
<p class="content">the monad laws</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:28:57</p>
<p class="content">haha</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:29:10</p>
<p class="content">is very very simply for you now</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:29:27</p>
<p class="content">just from the definithion of category, functor, monad</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:30:01</p>
<p class="content">^_^</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:30:06</p>
<p class="content">to make sure the compostion associativity, the identity, etc. works</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:31:01</p>
<p class="content">so ~ I think you&#8217;ve already mastered some key points of monad</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:31:31</p>
<p class="content">haha , you are a mastered teacher!</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:32:05</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" />the monad is just this simple~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:32:17</p>
<p class="content">when you recall it</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:33:02</p>
<p class="content">Category(objects, arrows,compostion associativity,identity),</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:33:12</p>
<p class="content">Functor( A category to another )</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:33:18</p>
<p class="content">then Monad~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:33:40</p>
<p class="content">haha , so great</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:34:12</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" />聊天记录多少页了</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:34:30</p>
<p class="content">明天整理下， 哈哈</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:34:44</p>
<p class="content">好久没见中文了哇</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:34:44</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" />呵呵~XXX谈话录~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:34:50</p>
<p class="content">哎~ 是哦</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:35:08</p>
<p class="content">E文都是专八的水平</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:35:16</p>
<p class="content">andelf访谈路<img src="/images/Face2/20.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:35:45</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" />andelf 谈 Monad</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:36:11</p>
<p class="content">哈哈，话说某人还计划一套系列文章来</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:36:48</p>
<p class="content">注意啊~我隐去了 natual transformation 的内容, 那个没多少用, 这些就够了, 后来觉得增加复杂性, 没多大用, 以及其他一些很BT的概念</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:36:59</p>
<p class="content">呵呵~过几天再整理</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:37:04</p>
<p class="content">mark ^_^</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:37:46</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" />聊天记录导出直接发表~ 还是E文版的~ 多好</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:37:59</p>
<p class="content">哈哈</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:38:05</p>
<p class="content">差不多明白就好~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:38:26</p>
<p class="content">深层理解涉及到 typed lambda calculates</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:38:33</p>
<p class="content">这个我看不懂</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:38:37</p>
<p class="content">放弃了</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:39:18</p>
<p class="content">借过一本《类型与程序设计语言》还是什么书来着，当天就还了 <img src="/images/Face2/27.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:39:30</p>
<p class="content">根本看不懂~~~哈哈~~~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:39:43</p>
<p class="content">哈哈~~~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:39:49</p>
<p class="content">抽象代数现在计算机都不开了</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:39:54</p>
<p class="content">已经不是趋势了</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:39:55</p>
<p class="content">哎</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:40:21</p>
<p class="content">软工 &gt;&lt;</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:40:34</p>
<p class="content">因为大家要吃软饭 &gt;&lt;</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:40:44</p>
<p class="content">是啊</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:40:54</p>
<p class="content">函数式应用还是很少</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:41:03</p>
<p class="content">多的也是和命令式结合</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:41:13</p>
<p class="content">是啊</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:41:34</p>
<p class="content">.net的C#，jvm的scala</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:41:34</p>
<p class="content">纯函数式大概只有数学家才能运用自如</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:42:06</p>
<p class="content">其他语言加点FP的东西, 让会点FP的同学偶尔爽下, 来点小 hack, 这就行了~</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:42:15</p>
<p class="content">太边缘化也不好</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:42:25</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:42:42</p>
<p class="content">这事猪流的世界<img src="/images/Face2/20.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:42:48</p>
<p class="content">以后你再要丢人发些烂tweet我直接发短信骂你</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:43:05</p>
<p class="content">再也不敢了&#8230;窘</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:43:12</p>
<p class="content">ramen</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:43:12</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:43:18</p>
<p class="content"><img src="/images/Face2/34.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:43:24</p>
<p class="content"><img src="/images/Face2/0.gif" alt="" align="absmiddle" />不早了</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:43:25</p>
<p class="content">休息</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:43:34</p>
<p class="content">安 :)</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:43:47</p>
<p class="content">安~</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:44:52</p>
<p class="content">整理下谈话录发校内上</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:45:02</p>
<p class="content">^_^</p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:45:07</p>
<p class="content"><img src="/images/Face2/20.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:45:16</p>
<p class="content"><img src="/images/Face2/52.gif" alt="" align="absmiddle" /></p>
</div>
<div>
<p class="friend-id">Feather  2009-07-20 00:46:38</p>
<p class="content">休息了~明天找门新语言看</p>
</div>
<div>
<p class="my-id">Fleurer  2009-07-20 00:47:01</p>
<p class="content">哈哈 ，好梦</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/07/20/%e7%8e%8b%e7%8c%ab%e7%8c%ab%e8%b0%88monad/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Fineday</title>
		<link>http://www.fleurer-lee.com/2009/06/14/fineday/</link>
		<comments>http://www.fleurer-lee.com/2009/06/14/fineday/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 06:15:45 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[备忘]]></category>
		<category><![CDATA[Fineday]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[PL]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645179</guid>
		<description><![CDATA[学习haskell一段时间了，关于monad等等东西仍停留在理论上的理解而不了解其应用，练下手总是好的。于是参考这个有名的《Write Yourself a Scheme in 48 Hours》和parsec的手册，实现了个简单的语言。只是简单的递归解析语法树，也没有中间编译，也没有垃圾收集，实现起来还是比较简单的。某天天气不错，晴天，就叫它Fineday。
Fineday的语法比较接近javascript（其实一开始是打算搞成basic-style的，可是不会写bnf&#8230;囧），有基本的控制流程if，while,for，有匿名函数，有闭包，有数组，有hash&#8212;当然，是忽略了许许多多细节的实现，例如没有求数组length的函数，只有puts而没有gets，没有Int类型（开始的时候为了方便一切都是double），没有像样子的错误提示&#8230;呵，but it runs.
像下面这段可以算是一个猥琐的oo实现了:

function makeCounter&#40;init&#41;&#123;
    var this=&#123;
        'n':init,
        'add':function&#40;n&#41;&#123;
            this&#91;'n'&#93;=this&#91;'n'&#93;+n;
            return [...]]]></description>
			<content:encoded><![CDATA[<p>学习haskell一段时间了，关于monad等等东西仍停留在理论上的理解而不了解其应用，练下手总是好的。于是参考这个有名的《<a href="http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html">Write Yourself a Scheme in 48 Hours</a>》和parsec的手册，实现了个简单的语言。只是简单的递归解析语法树，也没有中间编译，也没有垃圾收集，实现起来还是比较简单的。某天天气不错，晴天，就叫它Fineday。</p>
<p>Fineday的语法比较接近javascript（其实一开始是打算搞成basic-style的，可是不会写bnf&#8230;囧），有基本的控制流程if，while,for，有匿名函数，有闭包，有数组，有hash&#8212;当然，是忽略了许许多多细节的实现，例如没有求数组length的函数，只有puts而没有gets，没有Int类型（开始的时候为了方便一切都是double），没有像样子的错误提示&#8230;呵，but it runs.</p>
<p>像下面这段可以算是一个猥琐的oo实现了:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> makeCounter<span style="color: #009900;">&#40;</span>init<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">'n'</span><span style="color: #339933;">:</span>init<span style="color: #339933;">,</span>
        <span style="color: #3366CC;">'add'</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'n'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'n'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>n<span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'n'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> counter<span style="color: #339933;">=</span>makeCounter<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
puts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>counter<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'add'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">--</span><span style="color: #CC0000;">3</span>
puts<span style="color: #009900;">&#40;</span>counter<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'add'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #339933;">--</span><span style="color: #CC0000;">6</span></pre></div></div>

<p>前几天又翻了下姐姐送的那本《the ruby way》的序，matz谈及ruby语言的设计时提到了“道”，以及编写ruby时的信条：语言应该为人类服务，而不是相反。于是认识到，语言的设计绝非信手拈来的活计，设计中有太多需要斟酌的地方，有太多需要用心思考的地方。我等玩代码的，还是差的太远了。</p>
<p>项目地址：<a href="http://code.google.com/p/fineday/">http://code.google.com/p/fineday/ </a><br />
呵，空白的，懒得再写字了。可以用svn获得源代码及编译的exe文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/06/14/fineday/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Haskell：可变状态的命令式语言</title>
		<link>http://www.fleurer-lee.com/2009/06/13/haskell%ef%bc%9a%e5%8f%af%e5%8f%98%e7%8a%b6%e6%80%81%e7%9a%84%e5%91%bd%e4%bb%a4%e5%bc%8f%e8%af%ad%e8%a8%80/</link>
		<comments>http://www.fleurer-lee.com/2009/06/13/haskell%ef%bc%9a%e5%8f%af%e5%8f%98%e7%8a%b6%e6%80%81%e7%9a%84%e5%91%bd%e4%bb%a4%e5%bc%8f%e8%af%ad%e8%a8%80/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 06:16:46 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[翻译]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[monad]]></category>
		<category><![CDATA[PL]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645169</guid>
		<description><![CDATA[作者：Neil
翻译：ssword
原文：http://neilbartlett.name/blog/2007/04/11/haskell-an-imperative-language-with-mutable-state/
Haskell是一门惰性的纯函数式语言，也就意味着其中没有可变的变量。呃，有，没有？看下这个Factorial的haskell实现吧：

fact n = runST &#40;do
    r &#60; - newSTRef 1
    for &#40;1,n&#41; &#40;\x -&#62; do
       val &#60; - readSTRef r
       writeSTRef r &#40;val * x&#41;&#41;
    readSTRef r&#41;

嗯，我可没说这样写好。实际上，这样写很糟糕，一行纯函数式代码就可以漂亮的搞定同样的工作。不过请注意下这代码与命令式语言是如何的相像，如对“可变变量”r的破坏性更新。再贴一下，与同等的C代码做个对比：

&#160;
fact n = runST &#40;do    [...]]]></description>
			<content:encoded><![CDATA[<p>作者：Neil<br />
翻译：ssword<br />
原文：<a href="http://neilbartlett.name/blog/2007/04/11/haskell-an-imperative-language-with-mutable-state/">http://neilbartlett.name/blog/2007/04/11/haskell-an-imperative-language-with-mutable-state/</a></p>
<p>Haskell是一门惰性的纯函数式语言，也就意味着其中没有可变的变量。呃，有，没有？看下这个Factorial的haskell实现吧：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">fact n <span style="color: #339933; font-weight: bold;">=</span> runST <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span>
    r <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #339933; font-weight: bold;">-</span> newSTRef <span style="color: red;">1</span>
    for <span style="color: green;">&#40;</span><span style="color: red;">1</span><span style="color: #339933; font-weight: bold;">,</span>n<span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span>\x <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: #06c; font-weight: bold;">do</span>
       val <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #339933; font-weight: bold;">-</span> readSTRef r
       writeSTRef r <span style="color: green;">&#40;</span>val <span style="color: #339933; font-weight: bold;">*</span> x<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span>
    readSTRef r<span style="color: green;">&#41;</span></pre></div></div>

<p>嗯，我可没说这样写好。实际上，这样写很糟糕，一行纯函数式代码就可以漂亮的搞定同样的工作。不过请注意下这代码与命令式语言是如何的相像，如对“可变变量”r的破坏性更新。再贴一下，与同等的C代码做个对比：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">&nbsp;
fact n <span style="color: #339933; font-weight: bold;">=</span> runST <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span>               <span style="color: #339933; font-weight: bold;">|</span> int fact<span style="color: green;">&#40;</span>int n<span style="color: green;">&#41;</span> <span style="color: green;">&#123;</span>
     r <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #339933; font-weight: bold;">-</span> newSTRef <span style="color: red;">1</span>             <span style="color: #339933; font-weight: bold;">|</span>    int r <span style="color: #339933; font-weight: bold;">=</span> <span style="color: red;">1</span>;
                                 <span style="color: #339933; font-weight: bold;">|</span>    int i;
     for <span style="color: green;">&#40;</span><span style="color: red;">1</span><span style="color: #339933; font-weight: bold;">,</span>n<span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span>\x <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: #06c; font-weight: bold;">do</span>         <span style="color: #339933; font-weight: bold;">|</span>    for<span style="color: green;">&#40;</span>i<span style="color: #339933; font-weight: bold;">=</span><span style="color: red;">1</span>;i<span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #339933; font-weight: bold;">=</span>n;i<span style="color: #339933; font-weight: bold;">++</span><span style="color: green;">&#41;</span> <span style="color: green;">&#123;</span>
         val <span style="color: #339933; font-weight: bold;">&lt;-</span> readSTRef r      <span style="color: #339933; font-weight: bold;">|</span>
         writeSTRef r <span style="color: green;">&#40;</span>val <span style="color: #339933; font-weight: bold;">*</span> x<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">|</span>       r <span style="color: #339933; font-weight: bold;">=</span> r <span style="color: #339933; font-weight: bold;">*</span> i;
                                 <span style="color: #339933; font-weight: bold;">|</span>    <span style="color: green;">&#125;</span>
     readSTRef r<span style="color: green;">&#41;</span>                <span style="color: #339933; font-weight: bold;">|</span>    <span style="font-weight: bold;">return</span> r;
                                 <span style="color: #339933; font-weight: bold;">|</span> <span style="color: green;">&#125;</span></pre></div></div>

<p>瞧，你几乎可以把C的代码一对一地翻译成haskell。不过得承认，haskell的语法要猥琐些。</p>
<p>这一切是如何做到的呢？答案就是ST monad，有了它就可以写出有内部状态更新而对外仍保持纯粹的算法。runST函数是亮点，它创建了个初始的空状态，然后执行一系列的状态转换，到最后再销毁它。fact依然是Int->Int的纯函数，依然保留了引用透明。</p>
<p>另一个亮点是那个“for”，看起来跟个关键字一般，不过它本质就是一普通函数，定义如下：</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">for <span style="color: #339933; font-weight: bold;">::</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Int</span><span style="color: #339933; font-weight: bold;">,</span><span style="color: #cccc00; font-weight: bold;">Int</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">Int</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> ST s <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> ST s <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span>
for <span style="color: green;">&#40;</span>i<span style="color: #339933; font-weight: bold;">,</span>j<span style="color: green;">&#41;</span> k <span style="color: #339933; font-weight: bold;">=</span> <span style="font-weight: bold;">sequence_</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">map</span> k <span style="color: green;">&#91;</span>i<span style="color: #339933; font-weight: bold;">..</span>j<span style="color: green;">&#93;</span><span style="color: green;">&#41;</span></pre></div></div>

<p>同理，我们也可以定义出foreach，if，while等等。有haskell这般强大的表达力，没必要再将控制流的操作定义为语言的关键字；我们甚至可以根据自己的需求来发明新的控制流程。</p>
<p>不过你看出来了没？没人会正二八经地像上面那样实现factorial。而且，我们真的希望如这般曲解haskell，以取悦从C过来的老程序员么？</p>
<p>是的，问题就在这里。有这项技巧，是为那些已知难以使用函数式风格或递归搞定的算法提供的折衷。同样，很多算法需要用到数组&#8212;&#8211;有限的内存和固定的访问时间&#8212;&#8211;使其更易于处理。在ST monad中实现数组很容易，但在传统的纯函数式代码中就要困难多了。（UPDATE：Cale说，纯代码中实现不可变的数组还是很容易的，只有可变的数组实现其来才困难）。</p>
<p>恩，ST monad和STRef表示了外部不可见的局部状态，那么全局的可变状态呢？我们可以用IO monad和IORef做到。当然，在用IO的时候就没有像runST那样回到纯代码的函数了[1]。</p>
<p>对我，这引发的思考就是：haskell是真正的纯函数式语言吗？我觉得不是&#8212;&#8211;它超越了纯函数式。它是既允许命令式编程，又使用强大类型系统来把有副作用的代码与纯代码分离。这一点，令它强大无比。</p>
<p>[1] 这不是绝对…其实有个方法：unsafePerformIO。不过我觉得应该辩证地讨论它。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/06/13/haskell%ef%bc%9a%e5%8f%af%e5%8f%98%e7%8a%b6%e6%80%81%e7%9a%84%e5%91%bd%e4%bb%a4%e5%bc%8f%e8%af%ad%e8%a8%80/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>理解continuation</title>
		<link>http://www.fleurer-lee.com/2009/06/06/%e7%90%86%e8%a7%a3continuation/</link>
		<comments>http://www.fleurer-lee.com/2009/06/06/%e7%90%86%e8%a7%a3continuation/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 05:34:20 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[continuation]]></category>
		<category><![CDATA[FP]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645159</guid>
		<description><![CDATA[当时小，不懂事，初学函数式编程时一头就扎的就是continuation和monad，一直搞不明白就一直放着。上个星期在ShiningRay老师的这篇《简介延续“Continuation”》里看到：

def call_cc&#40;f,c&#41;:
     f&#40;c,c&#41;

貌似很泪流满面的样子，没想到这东西有这么简单。之后在图书馆里写了一个小时的伪代码，貌似搞明白了。按照Continuation Passing Style(cps)的设定，函数没有返回值，而是用函数的运算结果调用函数最后一个参数，很简单吧。不过那些特性又是从何而来呢，像保存状态尾递归优化之类？现在想想，之前之所以不理解，大概就是因为不会写cps的递归吧，其实动手写的话也就那回事。国父孙先生不是说么，知难行易。
如下伪代码，求前n个自然数的和：

def sum&#40;n&#41;:
    if &#40;n==0&#41;: 0
    else :
        n+sum&#40;n-1&#41;

换成等价的前缀形式(if就懒得改了，知道这回事就好)：

def sum&#40;n&#41;:
	if &#40;n==0&#41;: return 0
    else
        return add&#40;n, sum&#40;sub&#40;n,1&#41;&#41;&#41;

好，换成cps：

def sum&#40;n,c&#41;:
    if &#40;n==0&#41;: c&#40;0&#41; #“延续”下去，而不是返回
 [...]]]></description>
			<content:encoded><![CDATA[<p>当时小，不懂事，初学函数式编程时一头就扎的就是continuation和monad，一直搞不明白就一直放着。上个星期在ShiningRay老师的这篇《<a href="http://shiningray.cn/continuations.html">简介延续“Continuation”</a>》里看到：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> call_cc<span style="color: black;">&#40;</span>f,c<span style="color: black;">&#41;</span>:
     f<span style="color: black;">&#40;</span>c,c<span style="color: black;">&#41;</span></pre></div></div>

<p>貌似很泪流满面的样子，没想到这东西有这么简单。之后在图书馆里写了一个小时的伪代码，貌似搞明白了。按照Continuation Passing Style(cps)的设定，函数没有返回值，而是用函数的运算结果调用函数最后一个参数，很简单吧。不过那些特性又是从何而来呢，像保存状态尾递归优化之类？现在想想，之前之所以不理解，大概就是因为不会写cps的递归吧，其实动手写的话也就那回事。国父孙先生不是说么，知难行易。</p>
<p>如下伪代码，求前n个自然数的和：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>: <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">else</span> :
        n+<span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>n-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></pre></div></div>

<p>换成等价的前缀形式(if就懒得改了，知道这回事就好)：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> add<span style="color: black;">&#40;</span>n, <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>sub<span style="color: black;">&#40;</span>n,<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>好，换成cps：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>n,c<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>: c<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;">#“延续”下去，而不是返回</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        sub n, <span style="color: #ff4500;">1</span>, <span style="color: black;">&#40;</span>\x1 -<span style="color: #66cc66;">&gt;</span> <span style="color: #808080; font-style: italic;">#一个lambda，匿名函数</span>
        <span style="color: #008000;">sum</span> x1, <span style="color: black;">&#40;</span>\x2 -<span style="color: #66cc66;">&gt;</span> <span style="color: #808080; font-style: italic;">#递归在这里</span>
        add x2 ,n ,c<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>再一个迭代的例子：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> iter_sum<span style="color: black;">&#40;</span>n, r<span style="color: black;">&#41;</span>:
     <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> : <span style="color: #ff7700;font-weight:bold;">return</span> r
     <span style="color: #ff7700;font-weight:bold;">else</span> : iter_sum<span style="color: black;">&#40;</span>n-<span style="color: #ff4500;">1</span>, r+n<span style="color: black;">&#41;</span></pre></div></div>

<p>换成前缀：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> iter_sum<span style="color: black;">&#40;</span>n,r<span style="color: black;">&#41;</span>:
     <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> r
     <span style="color: #ff7700;font-weight:bold;">else</span> : iter_sum<span style="color: black;">&#40;</span>sub<span style="color: black;">&#40;</span>n, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>, add<span style="color: black;">&#40;</span>r,n<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>cps:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> c_iter_sum<span style="color: black;">&#40;</span>n,r,c<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>n==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>: c<span style="color: black;">&#40;</span>r<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        sub n, <span style="color: #ff4500;">1</span>, <span style="color: black;">&#40;</span>\x1 -<span style="color: #66cc66;">&gt;</span>
        add r, n, <span style="color: black;">&#40;</span>\x2 -<span style="color: #66cc66;">&gt;</span>
        c_iter_sum<span style="color: black;">&#40;</span>x1, x2, c<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;">#尾递归</span></pre></div></div>

<p>可以看出，cps中引入了些自由变量，把函数求值的结果放在堆里而非栈中，于是就可以实现不限深度的递归。不过这样貌似增加了垃圾收集的负担，没有银弹哇。</p>
<p>contiuation中只有“延续”而没有“返回”，每一步“延续”都是对后面函数的调用，通过一条函数与函数的链构成了顺序结构。ShiningRay老师貌似说过，一个函数调用就是一个状态。callcc貌似就是把“延续”的下一个函数保存，从而保存了状态。Smalltalk的那个Seaside框架貌似就是把contiuation作为对象持久化，在下次访问时找到这个持久化的contiuation将状态还原，从而模拟出仿桌面程序开发的效果。貌似要比asp.net那WebForm的实现更加自然些。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/06/06/%e7%90%86%e8%a7%a3continuation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
