bp = "<p>"
ep = "</p>\n"
bbq = "<block quote>\n"
ebq = "</block quote>\n"
convert txt = let
depth cs
= if "> " == ( take 2 cs
) then 1 + ( depth
$ drop 2 cs
) else 0
leftCs cs
= drop ( 2 * ( depth cs
) ) cs
dpAndLeft cs = ( depth cs, leftCs cs )
dpAndCs
= ( map dpAndLeft ls
) ++ [ ( 0, "" ) ] join
( p
, txt
) ( q
, cs
) = id $ ( ( , ) q )
$ ( txt ++ )
$ ( ++ ( ( replicate q ' ' ) ++ bp ++ cs ++ ep ) )
EQ -> [ "" ]
$ [ ( replicate r ' ' ) ++ bbq | r <- [p..q-1] ]
$ [ ( replicate r ' ' ) ++ ebq | r <- [q..p-1] ]
result
= foldl join
( 0, "" ) dpAndCs
sample1= "paragraph\n"
++ "> block quoted paragraph"
sample2= "> hoge\n"
++ "> > nested piyo1\n"
++ "> > nested piyo2\n"
++ "> fuga"
main = do
YnAgPSAiPHA+IgplcCA9ICI8L3A+XG4iCmJicSA9ICI8YmxvY2sgcXVvdGU+XG4iCmVicSA9ICI8L2Jsb2NrIHF1b3RlPlxuIgoKY29udmVydCB0eHQgPSBsZXQKICAgIGxzID0gKCBsaW5lcyB0eHQgKSAKICAgIGRlcHRoIGNzID0gaWYgIj4gIiA9PSAoIHRha2UgMiBjcyApCiAgICAgICAgdGhlbiAxICsgKCBkZXB0aCAkIGRyb3AgMiBjcyApCiAgICAgICAgZWxzZSAwCiAgICBsZWZ0Q3MgY3MgPSBkcm9wICggMiAqICggZGVwdGggY3MgKSApIGNzCiAgICBkcEFuZExlZnQgY3MgPSAoIGRlcHRoIGNzLCBsZWZ0Q3MgY3MgKQogICAgZHBBbmRDcyA9ICggbWFwIGRwQW5kTGVmdCBscyApICsrIFsgKCAwLCAiIiApIF0KICAgIGpvaW4gKCBwLCB0eHQgKSAoIHEgLCBjcyApID0gaWQKICAgICAgICAkICggKCAsICkgcSApCiAgICAgICAgJCAoIHR4dCArKyApCiAgICAgICAgJCAoICsrICggKCByZXBsaWNhdGUgcSAnICcgKSArKyBicCArKyBjcyArKyBlcCApICkKICAgICAgICAkIGNvbmNhdCAKICAgICAgICAkIGNhc2UgKCBjb21wYXJlIHAgcSApIG9mCiAgICAgICAgICAgIEVRIC0+IFsgIiIgXQogICAgICAgICAgICBMVCAtPiAgaWQKICAgICAgICAgICAgICAgICQgWyAoIHJlcGxpY2F0ZSByICcgJyApICsrIGJicSB8IHIgPC0gW3AuLnEtMV0gXQogICAgICAgICAgICBHVCAtPiByZXZlcnNlIAogICAgICAgICAgICAgICAgJCBbICggcmVwbGljYXRlIHIgJyAnICkgKysgZWJxIHwgciA8LSBbcS4ucC0xXSBdIAogICAgcmVzdWx0ID0gZm9sZGwgam9pbiAoIDAsICIiICkgZHBBbmRDcwogICAgaW4gcmV2ZXJzZSAkIGRyb3AgOCAkIHJldmVyc2UgJCBzbmQgcmVzdWx0CiAgCnNhbXBsZTE9ICJwYXJhZ3JhcGhcbiIKICAgICsrICI+IGJsb2NrIHF1b3RlZCBwYXJhZ3JhcGgiCiAKc2FtcGxlMj0gIj4gaG9nZVxuIgogICAgKysgIj4gPiBuZXN0ZWQgcGl5bzFcbiIKICAgICsrICI+ID4gbmVzdGVkIHBpeW8yXG4iCiAgICArKyAiPiBmdWdhIgoKbWFpbiA9IGRvCiAgICBwdXRTdHJMbiAkIGNvbnZlcnQgc2FtcGxlMQogICAgcHV0U3RyTG4gJCBjb252ZXJ0IHNhbXBsZTIK