【发布时间】:2016-11-13 03:17:30
【问题描述】:
谁能解释一下为什么我在这段代码中出现了一个循环?
module Main where
import Data.List.Split
import Data.Maybe
import Text.Read
main :: IO ()
main = print (snd (toInmetDate "01/02/2012"))
type P a = (Bool, a)
readP :: (Read a) => String -> P a
readP text
| isJust value = (True, fromJust value)
| isNothing value = (False, read "0")
where value = readMaybe text
data InmetDate = InmetDate {dia :: P Int, mes :: P Int, ano :: P Integer}
deriving (Show, Read)
toInmetDate :: String -> P InmetDate
toInmetDate x = if length l == 3
then (True, InmetDate (readP ds) (readP ms) (readP as))
else (False, InmetDate (False, 0) (False, 0) (False, 0))
where (l,ds:ms:as:_) = (splitOn "/" x, l ++ replicate 20 "NULL")
我会说,当我制作时:
where (l,ds:ms:as:_) = (splitOn "/" x, l ++ replicate 20 "NULL")
等于:
where (ds:ms:as:_) = l ++ replicate 20 "NULL"
l = splitOn "/" x
代码完美运行。
【问题讨论】:
-
如果投反对票,请让我最后知道原因,以便我找出问题所在,谢谢...
-
我没有投反对票,但如果我心情不合理,那么我可能会因为代码片段没有编译(需要一些导入,
main进行测试)。 -
最近似乎对很多 Haskell 问题投了反对票。也许有人心怀不满并试图使社区士气低落。
-
很遗憾,在几年前第一次接触 Haskell 之后,我与 Haskell 有了更多的联系,发现它是一种美丽的语言,有点难,但非常美丽。
标签: haskell