genPoke' :: String -> [((String,Bool),String)] -> String
genPoke' name types_names = concat [fst_line, concat middle_lines, last_line] 
    where fst_line = concat ["void poke",name,"(", args, "){\n"]
          args     = concat $ intersperse ", " $(concat [name, "* val"]) :cstructArguments' types_names
          middle_lines = zipWith (\n1 n2 -> concat ["    val->",n1," = ", n2, ";\n"]) (map snd types_names) (map accessAsPointer types_names)
          last_line = "}\n\n"
genPoke' :: String -> [((String,Bool),String)] -> String
genPoke' name types_names = concat [fst_line, concat middle_lines, last_line] 
    where fst_line = concat ["void poke",name,"(", args, "){\n"]
          args     = concat $ intersperse ", " $(concat [name, "* val"]) :cstructArguments' types_names
          middle_lines = zipWith (\n1 n2 -> concat ["    val->",n1," = ", n2, ";\n"]) (map snd types_names) (map accessAsPointer types_names)
          last_line = "}\n\n"
genPoke' name types_names = concat [fst_line, concat middle_lines, last_line] 
    where fst_line = concat ["void poke",name,"(", args, "){\n"]
          args     = concat $ intersperse ", " $(concat [name, "* val"]) :cstructArguments' types_names
          middle_lines = zipWith (\n1 n2 -> concat ["    val->",n1," = ", n2, ";\n"]) (map snd types_names) (map accessAsPointer types_names)
          last_line = "}\n\n"