Haskell “读取”功能是否有完全替代方案?

Haskell “读取”功能是否有完全替代方案?,haskell,casting,functional-programming,Haskell,Casting,Functional Programming,为什么函数read在无法解析其参数时终止可执行文件 在我看来,使用类型为String->a的函数会更方便,如果无法将字符串解析为类型a,该函数将返回Nothing,但我找不到类似的函数。我缺少什么?您正在查找的函数名为readMaybe,在模块文本中定义。Read: 它从GHC 7.6开始提供。在此之前,您必须调用reads,该函数返回一个解析值列表(可能为空),并对其进行模式匹配。我对Haskell了解不多,但我无法理解read函数如何是纯函数:根据定义,它有显著的副作用。@BasileSt

为什么函数
read
在无法解析其参数时终止可执行文件


在我看来,使用类型为
String->a
的函数会更方便,如果无法将字符串解析为类型
a
,该函数将返回
Nothing
,但我找不到类似的函数。我缺少什么?

您正在查找的函数名为
readMaybe
,在模块
文本中定义。Read


它从GHC 7.6开始提供。在此之前,您必须调用
reads
,该函数返回一个解析值列表(可能为空),并对其进行模式匹配。

我对Haskell了解不多,但我无法理解
read
函数如何是纯函数:根据定义,它有显著的副作用。@BasileStarynkevitch
read
不从输入读取;它只是将其参数转换为
字符串
(就像Python的
\uuuu str\uuu
方法一样)。它是前奏曲中的几个函数之一(包括
head
tail
),可以算作总数,但是为了简单起见被定义为部分函数。@BasileStarynkevitch为什么你认为解析字符串需要显著的副作用?@chepner Nitpick:我认为你描述的是
show
,而不是
read
,这与此相反。一般的观点仍然是:
read
String
转换为某种类型,但不执行任何输入/输出。将
readMaybe
添加到前奏曲中。