petercommand@tg says to YSITD
let t = [[]] ++ map (\s -> [s:[]]) "abc" in do { (m:[]) <- t ; d <- t ; return (join $ m:d) }