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