我试图理解两者之间的区别;
val my_fun = length o List.filter (fn (item) => item = #"a") o String.explode 
Run Code Online (Sandbox Code Playgroud)
这个可以被调用(my_fun“name”将返回 1)并且工作正常。我试图理解为什么以下不起作用
length o (List.filter (fn (item) => item = #"a" ) (String.explode "name"))
Run Code Online (Sandbox Code Playgroud)
sml中函数组合的定义
f o g = f(g(x))
Run Code Online (Sandbox Code Playgroud)
在第二种形式中我们所做的是(我认为)
length ([#"a"]) 
Run Code Online (Sandbox Code Playgroud) 我在 Haskell 世界中很新。我正在阅读在线http://learnyouahaskell.com,但我无法理解有关模式匹配部分的一个小细节。我已经写了那些函数
myFunc' (firstLetter:_) = firstLetter -- returns firstLetter of given string
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做
myFunc' (firstLetter:_) = "Hello" ++firstLetter
Run Code Online (Sandbox Code Playgroud)
调用此函数时出现以下错误
Couldn't match type ‘Char’ with ‘[Char]’
      Expected type: [[Char]]
        Actual type: [Char]
Run Code Online (Sandbox Code Playgroud)
但是如果我像这样修改函数
myFunc' (firstLetter:_) = "Hello" ++ [firstLetter]
Run Code Online (Sandbox Code Playgroud)
当我调用这个函数时效果很好。我想知道为什么在其他情况下我需要括号。什么实际上是firstLetter。