2017-03-05 94 views
16

爲什麼函數read在無法解析其參數時終止可執行文件?是否有`read`函數的完全替代方法?

在我看來,如果函數的類型爲String -> Maybe a,返回Nothing如果字符串不能被解析爲a類型,但我找不到類似的東西,會更方便。我錯過了什麼?

+0

我不太瞭解Haskell,但我無法理解'read'函數是如何純粹的:根據定義,它有*顯着*副作用。 –

+10

@BasileStarynkevitch'read'不會從輸入中讀取;它只是將它的參數轉換爲一個String(就像Python的__str__方法)。 – chepner

+0

它是Prelude中的幾個函數之一(包括'head'和'tail'),它們可能已經完成了,但爲了簡單起見,它們被定義爲部分函數。 – chepner

回答

23

你正在尋找被稱爲readMaybe和模塊Text.Read中定義的函數:

https://hackage.haskell.org/package/base-4.9.1.0/docs/Text-Read.html#v:readMaybe

它可以自GHC 7.6。在此之前,你不得不打電話reads,它返回一個(可能是空的)解析值列表和模式匹配。

+1

將'readMaybe'添加到Prelude [最近在圖書館郵件列表中打開](https://mail.haskell.org/pipermail/libraries/2016-December/027496.html)。 – Alec

相關問題