<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I have a piece of code to represents Sentences, Paragraphs and the Content of an article. I added functions to count the words, code below. My questions:</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
1- Are these functions idiomatic?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
2- Is this an efficient way to do the computation?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
3- In different languages, I could (and would) give the same name `wordCount` to the three functions, because the type of the input would clarify the usage. But here GHC throws an error. What's the most idiomatic way to do this in Haskell?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<div>type Sentence  = String</div>
<div>type Paragraph = [Sentence]</div>
<div>type Content   = [Paragraph]</div>
<div><br>
</div>
<div>sentWordCount :: Sentence -> Int
<div>sentWordCount = length . words</div>
<br>
</div>
<div>parWordCount :: Paragraph -> Int
<div>parWordCount = foldr ((+) . sentWordCount) 0</div>
<br>
contWordCount :: Content -> Int
<div>contWordCount = foldr ((+) . parWordCount) 0</div>
<br>
I also have two more practical questions on the following two functions:</div>
<div><br>
</div>
<div>makeSentence :: String -> Sentence</div>
<div>makeSentence x = x::Sentence<br>
</div>
<div><br>
</div>
<div>sentCharCount :: Sentence -> Int
<div>sentCharCount x = length $ filter (/= ' ') x</div>
<br>
4- About `makeSentence` -- does it make sense to write a function like that just to encapsulate the String type?</div>
<div>5- About `sentCharCount` -- I cannot take the argument x off, the compilator complains. What's the reason?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>-P</div>
<br>
<br>
</div>
</body>
</html>