2012-01-13 17 views
0

У меня есть список из списка с 3-мя строки, как tst3, и мне нужно разобрать весь список и использовать первые и вторые аргументы (строки) в функции. Но карта не очень хорошо работает с нимРазбор элементов из списка списков в Haskell

function a b = do {putStrLn (a ++ "stuff"); 
        putStrLn b;} 


    tst3 = [["aaa","aaaaaaaa","112121"],["asda","a22","aaax"]] 
    fx2 s = map fx3 (tst3) 
     where fx3 s = function (s!!0)(s!!1) 



Couldn't match expected type `[a]' against inferred type `Char' 
    Expected type: [[[a]]] 
    Inferred type: [[Char]] 
In the second argument of `map', namely `(tst3)' 
In the expression: map fx3 (tst3) 

Есть ли лучший способ сделать это? можно использовать [("AA", "ВВ"), ("WW", "куб"), ("JJ", "ОООО")], если он становится проще

Благодаря

+3

Тип 'функция' выключен, но, не видя этого, мы, вероятно, не можем понять почему. – Xodarap

+0

Не нужен тип – MrFabio

+0

Нам нужно увидеть источник 'function'. –

ответ

3

Там нет ничего неправильный с тем, что вы там написали, однако на самом деле это не очень важно. Вы преобразовываете список данных какого-либо типа в список операций ввода-вывода, но это само по себе ничего не делает: то, что вы, вероятно, хотите, - это выполнить эти действия для каждого элемента списка. Этот вид обычно делается с mapM_:

function :: String -> String -> IO() 
function a b = do putStrLn (a ++ "stuff") -- there's no reason to use curly 
        putStrLn b    -- brackets here 


tst::[(String,String,String)] 
tst3 = [("aaa","aaaaaaaa","112121"),("asda","a22","aaax")] 

fx2 :: a -> IO() 
fx2 s = mapM_ fx3 (tst3)  -- note that this s parameter is not used at all 
    where fx3 (s,s',_) = function s s' 
+0

Это отличное спасибо! Я не знал ** mapM **, но он работает, используя ** map ** не будет – MrFabio

Смежные вопросы