Haskell列表列表类型转换编译报错求助(Advent of Code场景)
Haskell代码报错修复:类型不匹配与map参数不足
问题出在哪
你第7行的lambda函数里,内层map只写了字符串转整数的逻辑,但没把当前处理的数组arr传进去。原代码里的(\arr -> map (\x -> read x :: Integer))相当于拿到arr却没使用,直接返回了一个等待接收字符串数组的函数,而非转换后的整数数组,导致类型匹配失败。
修正后的代码
import Data.List.Split import System.IO main = do input <- getContents let bags = splitWhen (=="") $ lines input -- 给内层map补充arr参数 let bagsInteger = map (\arr -> map (\x -> read x :: Integer) arr) bags :: [[Integer]] -- 更简洁的写法:利用柯里化特性直接嵌套map -- let bagsInteger = map (map (\x -> read x :: Integer)) bags :: [[Integer]] let totals = map sum bagsInteger putStrLn $ show $ maximum totals
可选优化
如果想让代码更简洁,可直接指定read的类型,省去冗余lambda:
let bagsInteger = map (map (read :: String -> Integer)) bags
内容的提问来源于stack exchange,提问作者Alain Zeyu Lou
相关产品推荐
相关产品推荐

