
Hello again, I'm still working on that binding, and I've come to a problem that I just can't figure out. I'm sure it's staring me right in the face, so I think another pair of eyes to take a look. So if you look at my previous message, I defined a linked list data type in C. I'm trying to convert it to a Haskell list of strings, so here's my function: linkedListToHaskellStringList :: LinkedList -> IO [String] linkedListToHaskellStringList listPtr = let convertList' ptr = if listIsNull ptr then [] else let str = peekCString =<< (linked_list_getdata ptr) next <- linked_list_next ptr str : (convertList' next) in sequence $ convertList' listPtr listIsNull :: LinkedList -> Bool listIsNull (LinkedList ptr) = ptr == nullPtr So here's the compile error: Option.hsc:63:14: Couldn't match expected type `[t]' against inferred type `IO LinkedList' In a 'do' expression: next <- linked_list_next ptr In the expression: if listIsNull ptr then [] else do let str = peekCString =<< linked_list_getdata ptr next <- linked_list_next ptr str : (convertList' next) In the definition of `convertList'': convertList' ptr = if listIsNull ptr then [] else do let str = ... next <- linked_list_next ptr str : (convertList' next) Could anyone tell me what I'm doing wrong? Thanks a lot! -Rob