fp101公開課中Functional Parsers - Part 2的這個代碼是正確的么?
03-02
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 |