연습문제
블로그 소프트웨어를 위해 HTML 라이브러리에 몇 가지 기능이 더 필요합니다.
Html.Internal
모듈에 다음 기능을 추가하고 Html
모듈에서 내보내세요.
1. 순서 없는 목록
HTML에서 순서 없는 목록은 다음 형태를 가집니다:
<ul>
<li>item 1</li>
<li>item 2</li>
<li>...</li>
</ul>
라이브러리에 다음 함수를 추가하고자 합니다:
ul_ :: [Structure] -> Structure
이제 사용자는 다음과 같이 작성할 수 있습니다:
ul_
[ p_ "item 1"
, p_ "item 2"
, p_ "item 3"
]
그리고 다음 결과를 얻습니다:
<ul>
<li><p>item 1</p></li>
<li><p>item 2</p></li>
<li><p>item 3</p></li>
</ul>
2. 순서 있는 목록
순서없는 목록과 유사하지만, <ul>
대신 <ol>
을 사용합니다.
3. 코드 블록
<p>
와 유사하지만, <pre>
태그를 사용합니다. code_
라는 함수를 정의하세요.
정답
순서없는 목록
ul_ :: [Structure] -> Structure
ul_ =
Structure . el "ul" . concat . map (el "li" . getStructureString)
순서있는 목록
ol_ :: [Structure] -> Structure
ol_ =
Structure . el "ol" . concat . map (el "li" . getStructureString)
노트
위 두 함수를 하나의 함수로 합칠 수 있습니다.
코드 블록
code_ :: String -> Structure
code_ = Structure . el "pre" . escape