arrays - Haskell - Error map function returning a list -
what want apply stoline function on each element (string) of list passed stomap..
type of stoline : stoline :: string -> [obj].
here code :
stomap :: [[string]] -> [obj] stomap [[val]] = stoline val stomap (val:vals) = map (\a -> stoline a) val ++ ... example of data passed stomap : [["0","133","2"],["6","0","0"],["656","0","3"]].
error : couldn't match expected type obj actual type [obj] in return type of call of stoline.
problem map function returns list (and shouldn't!), don't know how avoid problem..
your first case unnecessary, , there's error in second case:
map (\a -> stoline a) val ++ ... val here [string], map (\a -> stoline a) val [[obj]]. since you're using ++ combine rest of results, ultimate result of type [[obj]], not [obj].
let's rework it:
stomap :: [[string]] -> [obj] stomap lolos = concatmap (\los -> concatmap (\s -> stoline s) los) lolos lolos list of lists of strings, los list of strings, , s string.
we use concatmap here, rather normal map, since want generate single list of objects [obj] not nested list of lists of lists of objects: [[[obj]]], , since we're running stoline on each string in input, need collapse structure traverse lolos.
we can clean above code (make more haskelly) making point-free. \s -> stoline s same stoline, have:
stomap lolos = concatmap (\los -> concatmap stoline los) lolos \los -> concatmap stoline los same concatmap stoline, reduce to:
stomap lolos = concatmap (concatmap stoline) lolos and can drop argument both sides, giving us:
stomap = concatmap (concatmap stoline) it may seem illegible @ first, experienced haskeller, can read more original code - it's clear me last version combines results of running stoline on list of lists.
Comments
Post a Comment