標籤:

fp101公開課中Functional Parsers - Part 2的這個代碼是正確的么?

fp101公開課parsers的第二部分,上來舉了一個例子,這個例子首先類型看起來是不正確的,item的返回是(Char, String),後面return的類型不可能是(Char, Char),但是這個不是重點。

我的問題是這裡看起來它把do當做是第一行item返回的String會傳給第二行,第二行返回的String會傳給第三行,這樣來得到第一個和第三個字元。

包括這一節最後的示例,parse一個數值列表的時候,例子中也把do當做是這個效果了。

但是我實際執行的效果是每一行都接受到了同一個參數。

例如上面這個函數,我傳入"hello",輸出是(h,h),而這個公開課中希望的輸出應該是(h,l)

請問是我的使用方式有什麼不對么?


圖裡面的代碼的擴寫其實是:

do
x &<- item fuck &<- item y &<- item return (x,y)

然後就變成

item &>&>= x -&>
item &>&>= fuck -&>
item &>&>= y -&>
return (x,y)

第二行當然也是會運行的。至於為什麼你的item執行了之後狀態沒有發生變化,請核對你的&>&>=函數。


推薦閱讀:

Haskell的Pipe/Conduit是什麼?
截至2016年,中文圈內有沒有非常好的函數式編程語言講義?
Equational Reasoning的含義是什麼?
剖析Haskell應用架構
Simon Peyton-Jones: Escape from the ivory tower: the Haskell journey

TAG:Haskell |