基本型類,如Show
,Eq
和Ord
應該很容易通過閱讀Hoogle和/或Haskell-2010 Language Report發現庫文檔把握。
Haskell中數字塔似乎令人費解(Int
類型是百日咳根據報告11個型類的實例),但它僅僅是支持所有有用的各種數字和多次交涉發明了我們的數學家:例如Integer
是一個任意大小的整數,Int
是通常的機器字大小的整數,並且整數的惰性Peano表示(不在標準庫中)在圖算法的實現中被證明是有用的。最重要的數值類型是Num
和Integral
。您可以使用fromIntegral
函數在不同的整數類型之間進行轉換。還請注意,諸如123的數字的類型爲Num a => a
,並且存在特殊類型的默認機制,旨在減少類型聲明的需要以指定您需要的確切數字類型。在高級使用情況下,這會對您產生不利影響,因此您可能需要更改默認設置。
同樣的情況是不同類型的字符串:沒有單一的表示適用於所有,所以很多人都在野外:String
,Data.ByteString
和Data.Text
是最重要的。
關於更復雜的類型,最好的來源是Typeclassopedia。
對於某些類型的類,如Monad
,Applicative
和Arrow
有很多專門的教程和研究工作。根據您的數學技能,您可能還想閱讀關於類型理論背後的類別理論概念的原始研究論文,例如Eugenio Moggi出色的「計算和單子概念」。
至於「eta減少」,它被稱爲Point-Free Style。您可以從 獲得該鏈接中提及的參考信息。您還可以查看John Backus Can programming be liberated from von neumann style?和APL編程語言1978年發表的Combinatory Logic,以獲得更加豐富的無點式歷史觀點。
也有一些關於Haskell的一般書籍,例如'Haskell簡介'和'瞭解你對Haskell的好處'。
至於運算符優先級 - 真的有少數運營商,你必須記住:(.)
,($)
和(>>=)
使用比一切更(除非當然算術,但算術運算符是相當令人吃驚)。
元組和列表的語法對我來說似乎也不成問題。它只是多餘的:foo : bar : []
與[foo, bar]
相同,而(,) foo bar
與(foo, bar)
相同。很少使用較高級別的元組的前綴版本,例如(,,,,)
。
另請參見http://www.haskell.org/haskellwiki/Section_of_an_infix_operator,以瞭解結構的說明,例如(+ 2)
和(2 +)
被稱爲章節。
此外,您可以從HLint工具建議改進您的代碼的變化中學習。 HLint可執行文件可以通過cabal install HLint
進行安裝。對於高級主題,我可以推薦學習純粹的功能數據結構(讓你設計高效的不可變數據結構和關於時間消耗的原因),根據需要調用lambda微積分(可以讓你推理什麼是評估和按什麼順序) ,System Fc類型系統(給你一些關於haskell類型檢查器工作的背景),指稱語義(關於非終止,偏度和遞歸的推理,以及對嚴格性,純度和可組合性概念的一些洞察)。
我想學習如何字面上「讀」haskell是學習如何閱讀haskell的意義大幫:http://stackoverflow.com/questions/7746894/are-there-pronounceable-names-for-common- haskell-operators – sclv
另外,您可能需要查看[連接語言](http://en.wikipedia.org/wiki/Concatenative_programming_language),例如[Factor](http://en.wikipedia.org/wiki/Factor_%28programming_language%29)以及[pointfree](http://hackage.haskell.org/package/pointfree)Haskell軟件包,以告知您的能力和願望以無點式編寫。 –
[斯坦福講義](http://www.scs.stanford.edu/11au-cs240h/notes/)和[ezyang page](http://ezyang.com/haskell.html)非常有幫助 –