diff --git a/src/HTML.hs b/src/HTML.hs
index d5777be..f253a67 100644
--- a/src/HTML.hs
+++ b/src/HTML.hs
@@ -64,7 +64,7 @@ generateLiElems (element : remainder) =
-- We assume child lists are stricly after our contents
-- if they aren't this is fucked
serializeInlineToHTML element.content,
- T.concat $ map (elementToHTML . List) element.children,
+ fromMaybe "" $ fmap (elementToHTML . List) element.child,
"",
generateLiElems remainder
]
diff --git a/src/IR.hs b/src/IR.hs
index 3aa30b0..4f2ad2e 100644
--- a/src/IR.hs
+++ b/src/IR.hs
@@ -33,7 +33,7 @@ data BlockQuote = Q [InlineText] deriving (Show)
data ListItem = LI
{ content :: [InlineText], -- Flatten continuations into here
- children :: [List]
+ child :: Maybe List
}
deriving (Show)
diff --git a/src/Markdown.hs b/src/Markdown.hs
index 8ccb1b4..f7d1e85 100644
--- a/src/Markdown.hs
+++ b/src/Markdown.hs
@@ -125,17 +125,21 @@ listBlock list_type prefix child_parser_factory nest_level = do
items <- some $ (try (listItem <* notFollowedBy blockEnding)) <|> (listItem <* lineEnding)
pure $ List $ L {list_type, items}
where
- listItem = error "listItem"
+ listItem = do
+ prefix
+ content <- many inlineText
+ child <- optional $ child_parser_factory $ nest_level + 1
+ pure $ LI {content, child}
unorderedListBlock :: (Logger m, Characters s) => Int -> Parser s m Element
-unorderedListBlock = listBlock Unordered unordered_prefix (\level -> unwrap <$> unorderedListBlock level)
+unorderedListBlock = listBlock Unordered unordered_prefix (\level -> unwrap <$> ((try $ unorderedListBlock level) <|> orderedListBlock level))
where
unordered_prefix = (choice $ map char "*-+") *> optional spaceChar
-- not exhaustive but we know listBlock is returning a List
unwrap (List l) = l
orderedListBlock :: (Logger m, Characters s) => Int -> Parser s m Element
-orderedListBlock = listBlock Ordered ordered_prefix (\level -> unwrap <$> orderedListBlock level)
+orderedListBlock = listBlock Ordered ordered_prefix (\level -> unwrap <$> ((try $ unorderedListBlock level) <|> orderedListBlock level))
where
ordered_prefix = error "ordered_prefix"
-- not exhaustive but we know listBlock is returning a List