
Hello Pietro, Il 13 dicembre 2020 alle 10:39 Pietro Grandinetti ha scritto:
Hello, 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:
[…]
I also have two more practical questions on the following two functions:
makeSentence :: String -> Sentence makeSentence x = x::Sentence
You can omit the `:: Sentence` part, since it is specified in the signature above. You can omit the whole function itself to be fair, Sentence is a type synonym!
sentCharCount :: Sentence -> Int sentCharCount x = length $ filter (/= ' ') x
You can write this point-free like this sentCharCount :: Sentence -> Int sentCharCount = length . filter (/= ' ') In this example you can regard `$` as «evaluate everything on the right before anything else», so length $ filter (/= ' ') ^^^^^^ ^^^^^^^^^^^^^^^ | | | | | +-- this has type :: [Char] -> [Char] | +-- length does not work on `[Char] -> [Char]` `.` instead is appropriate λ> :t (.) (.) :: (b -> c) -> (a -> b) -> a -> c Does this clear your doubts? —F