2017-03-05 52 views
16

Neden read işlevi, bağımsız değişkenini ayrıştırılamadığında yürütülebilir dosyayı sonlandırıyor?`read` işlevine toplam alternatif var mı?

O dize türü a olarak ayrıştırılamaz eğer Nothing döndüren tip String -> Maybe a, bir işlevi olması daha uygun olacaktır geliyor bana, ama böyle bir şey bulamıyorum. Neyi kaçırıyorum?

+0

Çok şey bilmiyorum Haskell, ama bir “read” fonksiyonunun nasıl saf olabileceğini anlayamıyorum: tanım gereği * önemli * yan etkileri vardır. –

+10

@BasileStarynkevitch 'read' girişten okumuyor; sadece argümanını bir 'String' olarak (Python' __str__' yöntemi gibi) çevirir. – chepner

+0

Prelüdün (“head” ve “tail” dahil olmak üzere) toplam yapılabilen birkaç fonksiyondan biridir, ancak basitlik uğruna kısmi işlevler olarak tanımlanmıştır. – chepner

cevap

23

Eğer readMaybe denir arıyor ve modül Text.Read tanımlanan işlevi:

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

O ghc 7.6 beri mevcuttur. Bundan önce reads'u aramanız gerekiyordu, bu da (potansiyel olarak boş) ayrıştırılmış değerlerin listesini ve desen eşlemesini döndürüyordu.

+1

Prelude'ye "readMaybe" eklenmesi [son zamanlarda kütüphanelerdeki postalama listesinde yukarı çık] (https://mail.haskell.org/pipermail/libraries/2016-December/027496.html). – Alec