標籤:

阻擋你學會Haskell最大的兩個問題是什麼?

1,Haskell的相干冊本比較匱乏,數量上我用手指就能數得過來。書且各有側重,寫Haskell相干的書想體系地連合好理論與實踐非常困難!不信你可以寫一本嘗嘗。

ProgramminginHaskell

LearnyouaHaskellforgreatgood

Thecraftoffunctionalprogramming

IntroductiontoFunctionalProgrammingUsingHaskell

SchoolofExpression

RealWorldHaskell

BeginningHaskell

Haskellfordataanalysis

ParallelandConcurrentProgramminginHaskell

DevelopingwebapplicationswithHaskellandYesod

此中前4本是講授用的,底子無法引導工程實踐。理論跟實踐比較好的便是SchoolofExpression,但是很多不是常用的庫,很多方向如FRP、Memoization沒有深入地先容。RWH是一本非常好的書,但是很多庫已經太舊了,不克不及利用了,但是書還是可以看,在線版的有討論,書中不翔實的地方都有人給出表明,非常不錯。BeginningHaskell實踐部分很不錯,但是理論部分險些沒有。Haskellfordataanalysis沒看過,不頒發批評。ParallelandConcurrentProgramminginHaskell只是講並行與並發的,但是一本難過的Haskell好書。高級的Haskell相干的書,最好的一本便是MichaelSnoyman的DWAHY了,工程上是一本非常好的書,但是你必要相識一些怎樣利用TH與QQ,另有一些其他相干的內容,但是遺憾的是沒有講這些內容。Haskell每本都如珍珠一樣平常,這些書的作者也者是相稱刁悍的人,PaulHudak、GrahamHutton,SimonMarlow等等。但是C++、Java、JS的書我能任意就搜出上百本,無論中文還是英文。

2,Haskell學習曲線本身非常陡峭。

步伐員本身的頭腦定勢是一個緊張的題目,以為語言都長得跟C差未幾。更有甚者以為Haskell不是圖靈完備,來由是Haskell不克不及賦值。

範例查抄與範例推測是第一個坎,上邊的書沒有一本講範例推測約莫是怎麼樣的,以是我開始的時間無法明白flipid,liftA3id如許的函數,我是讀研的時間學了Lambda演算與範例這門課里的simpletypedlambdacalculus另有PCF,看了Hindley的那本Lambda-calculusandCombinator才完全明白的。範例體系後邊另有Kind,KindPolymorphism以及將會出現的Kindcoercion。

Monad,MonadTransformation,MonadControl是第二個坎,Monad這東西剛開始學的時間很稀罕,很抽象,像是次序式編程,但是又不是,列表與LazyIO就不是,它是一種計劃模式,抽象次序式地謀略不過只是它的一部分罷了。你以為看會了Monad就完了,著實遠遠沒有,Michael那本書里另有相稱多的內容。

背面的Arrow的計劃要領就要比Monad越發抽象了,後邊另有ArrowTransformer。參考文獻只有論文了,底子沒有書,都是十幾頁的,但是想自若地用起來大概還要連續Hack好久。別的另有一些庫用到了Categorytheory,給了極高的抽象本領,這裡Arrow本身便是Category範例類上面的抽象。

以上內容,絕對夠你讀個一年的研究生。

3GHC進化相稱之快

Haskell已經引入了Typefamily,PolyKind,DataKind這些擴展,能完成部分Dependenttype的成果。為了補已往bug,還引入了typerole,safecoercion,這背面每一個課題都有一個大概幾個博士與之對應,比如PolyKind,DataKind對應荷蘭Utrecht大學的JosePedroMagalhaes也便是UHC的誕生地,Dependenttype對應了Chalmers大學的UlfNorell以及Strathclyde的AdamGundry,之後又有一系列的東西比如DependentlyTypedProgrammingwithSingletons邊邊角角的內容。

GHC每年都要頒布幾個版本,7.9已經完成了(但沒release你要本身編譯),7.10的RC已經放出,7.12已經在孕育當中了,時常要參加大量的擴展。很多特性的參加是一環扣一環的,並且沒有文檔較好地總結他們,很多論文已經很陳腐了,SPJ那篇TemplateHaskell的論文很多代碼不克不及直接用了,WhyitisnicetobeQuoted中很多的語法也已經被改了,給學習帶來了一些不須要的貧苦。學習了這麼久才發明只能方才跟上GHC的腳步,他們討論的東西我才華懂一些。

4庫的混沌

很多Hackage上的庫解釋都不怎麼有,尤其是在看Yampa的時間,很多多少switch沒有解釋,給wiki鏈接只有個圖,沒表明!FRP的變體也很多,沒有論文敘述了這些idea的生長,給學習造成了肯定的困難。別的另有一些庫去世失了,Haskellwiki連已往的鏈接也一起跪了,必要上waybackmachine才華找到。Haskell庫的學習一樣平常不過乎看論文,看wiki大概看某些人的博客,不過如今這些環境有所變動,終究有幾家Haskell公司創建了,conduit以及基於他們的庫也相稱成熟了,共同論文再看代碼還可以擔當。

5環境因素

中國開函數式編程課的大學屈指可數,中山大學的喬海燕老師的函數步伐計劃在他那邊是公選課,便是跟太極拳、養魚這種課一起的!之前看他們一個本科生畢業計劃用Haskell做的QuickCheck查抄的論文後實感無力,這麼淺近的東西是不克不及做畢業計劃的,但物以稀為貴,有人做便是要鼓勵的。以是這類語言利用的人口基數上你和我就差了一大塊,中文的參考文獻跟英文比起來險些相稱於沒有,以是生長得不好,利用的人少,遇到題目沒有人問,給學習也帶來了困難。



推薦閱讀:

求余和取模
Malt開發實錄(一)不斷改變的設計
C語言基礎:函數的聲明與定義
要獲得「機器學習或數據科學」的工作,到底選哪種編程語言更好?
html5可以做什麼?HTML5市場需求有哪些?

TAG:編程語言 |