[Haskell-beginners] Using output of head in data constuctor
bob at redivi.com
Sun Jun 28 14:35:15 UTC 2020
Parentheses in Haskell aren’t really related to function application, they
are only for grouping. It makes more sense if you avoid using them unless
In Haskell instead of `f(g(x))` we would write `f (g x)`, and instead of
`f(x,g(y),z)` we would write `f x (g y) z`. You could use more parentheses
but it would be more confusing, such as `(f)(x)(g(y))(z)`.
On Sun, Jun 28, 2020 at 05:50 Josh Friedlander <joshuatfriedlander at gmail.com>
> Thanks Francesco, that works. I don't quite understand what the issue was,
> though. Specifically:
> - Did the parentheses around (xs) hurt, or were they just redundant?
> - Wouldn't the parentheses around (head ...) be binding it as an argument
> to whatever comes before (in this case, 3)?
> On Sun, 28 Jun 2020 at 14:47, Francesco Ariis <fa-ml at ariis.it> wrote:
>> Hello Josh
>> Il 28 giugno 2020 alle 14:36 Josh Friedlander ha scritto:
>> > I want to create a log parser like this:
>> > module LogAnalysis where
>> > import Log
>> > parseMessage :: String -> LogMessage
>> > parseMessage xs
>> > | length(words(xs)) < 3 = Unknown xs
>> > | notElem(head(words(xs)) ["I", "E", "W"]) = Unknown xs
>> > | otherwise = LogMessage Info 3 head(words(xs))
>> > But GHC gives me "• Couldn't match type ‘[a0] -> a0’ with ‘[Char]’
>> > Expected type: String
>> > Actual type: [a0] -> a0"
>> I suspect `LogMessage Info 3 head(words(xs))` is the problem. This is
>> the same as writing
>> LogMessage Info 3 head (words xs)
>> keeping in mind how whitespace and parentheses work in Haskell. You
>> probably want
>> LogMessage Info 3 (head (words xs))
>> Beginners mailing list
>> Beginners at haskell.org
> Beginners mailing list
> Beginners at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners