i'm trying code:
intersperse ',' $ show 123
integrated function:
printlisttuples listtuple = unlines [ ys ++ " " ++ unwords (map show x) | (x, ys) <- listtuple ]
where x can equal 123 example.
therefore code should output string numbers this: "1,2,3"
rather "1 2 3" code does.
i keep getting errors trying "map" "intersperse" , "show" x in function. advice?
edit:
for example, tried using
printlisttuples listtuple = unlines [ ys ++ " " ++ unwords (map intersperse ',' $ show x) | (x, ys) <- listtuple ]
but returns error:
couldn't match expected type ‘string -> [string]’ actual type ‘[[a0] -> [a0]]’ first argument of ($) takes 1 argument, type ‘[[a0] -> [a0]]’ has none in first argument of ‘unwords’, namely ‘(map intersperse ',' $ show x)’ in second argument of ‘(++)’, namely ‘unwords (map intersperse ',' $ show x)’ couldn't match expected type ‘[a0]’ actual type ‘char’ in second argument of ‘map’, namely ‘','’ in expression: map intersperse ',' in first argument of ‘unwords’, namely ‘(map intersperse ',' $ show x)’
which not know enough fix.
let's have @ first error:
couldn't match expected type ‘string -> [string]’ actual type ‘[[a0] -> [a0]]’ first argument of ($) takes 1 argument, type ‘[[a0] -> [a0]]’ has none in first argument of ‘unwords’, namely ‘(map intersperse ',' $ show x)’
"the first argument of ($)
takes 1 argument" -- means should function, type shows:
ghci> :t ($) ($) :: (a -> b) -> -> b
map intersperse ','
, however, not function. passing 2 arguments map
, list...
ghci> :t map map :: (a -> b) -> [a] -> [b]
... however, map intersperse ','
ill-typed: ','
not list, cannot use map
map function on (that other error says). root of issue don't need map
apply intersperse ','
string
:
ghci> :t intersperse ',' intersperse ',' :: [char] -> [char]
that fix 2 errors... , introduce another:
ghci> let printlisttuples listtuple = unlines [ ys ++ " " ++ unwords (intersperse ',' $ show x) | (x, ys) <- listtuple ] <interactive>:33:66: couldn't match type ‘char’ ‘[char]’ expected type: [string] actual type: [char] in first argument of ‘unwords’, namely ‘(intersperse ',' $ show x)’ in second argument of ‘(++)’, namely ‘unwords (intersperse ',' $ show x)’ in second argument of ‘(++)’, namely ‘" " ++ unwords (intersperse ',' $ show x)’
now unwords
wants list of string
s, giving intersperse ',' $ show x
, list of char
s (that is, string
). directs our attention fact not need unwords
anymore: used put space between numbers, want put comma instead of space, , doing intersperse
. have removing it:
ghci> let printlisttuples listtuple = unlines [ ys ++ " " ++ (intersperse ',' $ show x) | (x, ys) <- listtuple ]
et voilĂ :
ghci> printlisttuples [(123, "foo"), (456, "bar")] "foo 1,2,3\nbar 4,5,6\n"
from here, should decompose function smaller parts, user5402 suggests in answer.
Comments
Post a Comment