无法匹配期望的类型`可能是Int - >夏亚'实际类型`Char'

时间:2015-10-08 16:44:03

标签: haskell

我有以下haskell代码。那篇评论出来的作品运行良好,但我想通过使用lambdas来缩短它。不幸的是我似乎没有编译代码。 intToDigit返回一个字符,但值低于15.这就是我怀疑导致问题的原因..

printSudRow :: [Maybe Int] -> String
printSudRow []       = []
--printSudRow (ro:ros) = parseMaybeToStr ro : printSudRow ros
--                       where parseMaybeToStr Nothing  = '.'
--                           parseMaybeToStr (Just v) = intToDigit v
printSudRow (ro:ros) = (\ro -> 
    if (isJust ro) then intToDigit $ fromJust ro else '.') : printSudRow ros

1 个答案:

答案 0 :(得分:4)

你想在这里做什么,根本不需要lambda(导致问题):

import Data.Maybe (isJust, fromJust)
import Data.Char (intToDigit)

printSudRow :: [Maybe Int] -> String
printSudRow []       = []
printSudRow (ro:ros) = (if (isJust ro) then intToDigit $ fromJust ro else '.') : printSudRow ros

当然,当你已经使用模式匹配时,为什么不要一直走:

printSudRow :: [Maybe Int] -> String
printSudRow []       = []
printSudRow (Just ro:ros) = intToDigit ro : printSudRow ros
printSudRow (Nothing:ros) = '.' : printSudRow ros
这样你根本不需要fromJustisJust和丑陋的if

maybe(已经提到过duplode)和map你也可以获得一个oneliner:

printSudRow :: [Maybe Int] -> String
printSudRow = map (maybe '.' intToDigit)