2
*> sin sin 0.5
<interactive>:10:1:
Non type-variable argument in the constraint: Floating (a -> a)
(Use FlexibleContexts to permit this)
When checking that ‘it’ has the inferred type
it :: forall a. (Floating a, Floating (a -> a)) => a
但是sin (sin 0.5)
有效。
我認爲它們是相同的,我無法理解錯誤信息。
我想知道爲什麼?haskell中的「sin sin 0.5」和「sin(sin 0.5)」有什麼區別?
它們不相同。函數應用程序是左關聯的,因此「sin sin 0.5」實際上是「(sin sin)0.5」,這不是你的意思,並導致類型錯誤。 – duplode
[瞭解Haskell優先級規則如何與多個部分應用程序一起工作]的部分副本(http://stackoverflow.com/questions/17243075/understanding-how-haskell-precedence-rules-work-with-multiple-partial-applicatio) – duplode