Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中的fromString-检查返回的类型_Haskell - Fatal编程技术网

haskell中的fromString-检查返回的类型

haskell中的fromString-检查返回的类型,haskell,Haskell,haskell中是否存在fromString函数?我期望除了从字符串转换为a之外,我还能够检查a是整数还是布尔值。你能帮帮我吗?使用阅读: 但是,我不建议read,除非您可以检查输入是否有效,因为如果给定的字符串无法解析,read将返回错误,而不是Nothing。尝试实现自己的函数,而不是使用monad,比如Maybe,或者更好。使用read: 但是,我不建议read,除非您可以检查输入是否有效,因为如果给定的字符串无法解析,read将返回错误,而不是Nothing。尝试实现您自己的函数,而不是

haskell中是否存在fromString函数?我期望除了从字符串转换为a之外,我还能够检查a是整数还是布尔值。你能帮帮我吗?

使用阅读:

但是,我不建议read,除非您可以检查输入是否有效,因为如果给定的字符串无法解析,read将返回错误,而不是Nothing。尝试实现自己的函数,而不是使用monad,比如Maybe,或者更好。

使用read:

但是,我不建议read,除非您可以检查输入是否有效,因为如果给定的字符串无法解析,read将返回错误,而不是Nothing。尝试实现您自己的函数,而不是使用monad,比如Maybe,或者更好。

fromString已经作为函数存在于typeclass IsString中。它的主要用途是使用-XOverloadedStrings编译选项,允许您为Haskell拥有的所有不同字符串实现使用字符串文本,例如strict/lazy ByteString和strict/lazy Text,但还有其他实例,例如URL、文件路径等

您提到了转换和检查操作。对于转换,我建议使用read。下面是一个将字符串转换为布尔值的简单程序:

main = do putStr "Enter a boolean:"
          inp <- getLine
          let b = read inp
          if b then putStrLn "You entered True"
               else putStrLn "You entered False"
请注意,由于我们已经验证了输入是否有效,因此对readin readInt的调用永远不会失败。

fromString已经作为函数存在于typeclass IsString中。它的主要用途是使用-XOverloadedStrings编译选项,允许您为Haskell拥有的所有不同字符串实现使用字符串文本,例如strict/lazy ByteString和strict/lazy Text,但还有其他实例,例如URL、文件路径等

您提到了转换和检查操作。对于转换,我建议使用read。下面是一个将字符串转换为布尔值的简单程序:

main = do putStr "Enter a boolean:"
          inp <- getLine
          let b = read inp
          if b then putStrLn "You entered True"
               else putStrLn "You entered False"
请注意,在readInt中读取的调用永远不会失败,因为我们已经验证了输入是否有效。

使用from Text.read。如果无法解析该值,则它将不返回任何内容。如果读取会引发错误,则返回:

import Text.Read (readMaybe)

isInteger :: String -> Bool
isInteger xs = (readMaybe xs :: Maybe Integer) /= Nothing

isBool    :: String -> Bool
isBool    xs = (readMaybe xs :: Maybe Bool)    /= Nothing
当然,如果您确实想使用整数或Bool,可以使用readMaybe的结果:

isPositive :: String -> Either String Bool
isPositive xs = case readMaybe xs :: Maybe Integer of
                  Just n  -> Right (n > 0)
                  Nothing -> Left "Not an Integer"
请注意,readMaybe使用的是Prelude中提供的。如果您想知道read和read实例是如何工作的,我建议您重新实现readMaybe with reads。

使用from Text.read。如果无法解析该值,则它将不返回任何内容。如果读取会引发错误,则返回:

import Text.Read (readMaybe)

isInteger :: String -> Bool
isInteger xs = (readMaybe xs :: Maybe Integer) /= Nothing

isBool    :: String -> Bool
isBool    xs = (readMaybe xs :: Maybe Bool)    /= Nothing
当然,如果您确实想使用整数或Bool,可以使用readMaybe的结果:

isPositive :: String -> Either String Bool
isPositive xs = case readMaybe xs :: Maybe Integer of
                  Just n  -> Right (n > 0)
                  Nothing -> Left "Not an Integer"

请注意,readMaybe使用的是Prelude中提供的。如果您想知道read和read实例是如何工作的,我建议您重新实现readMaybe with reads。

read。。。我在理解你的问题时遇到了一些困难-你能添加一些示例或尝试重新编写它吗?在我看来,这个问题要求一个通用的readDyn::String->Maybe Dynamic,它可以读取任何内容,并让用户测试动态是这个类型还是那个类型。read。。。我在理解你的问题时遇到了一些困难-你能添加一些示例或尝试重新编写吗?在我看来,这个问题需要一个通用的readDyn::String->Maybe Dynamic,它可以读取任何内容,让用户测试动态是这种类型还是那种类型。我建议使用Text.Read.readMaybe,而不是为每种需要的特定类型重新实现解析器。举个好例子,说明为什么不应该一直重新实现:readInt解析器不接受负数,更不用说八进制、十六进制、,等等。我建议使用Text.Read.readMaybe,而不是为每种需要的特定类型重新实现解析器。举个很好的例子说明为什么不应该一直重新实现:readInt解析器不接受负数,更不用说八进制、十六进制等了。