首页 > 解决方案 > 函数应用是从右到左应用吗?

问题描述

为什么会这样:

isValid :: String -> Bool
isValid =  (>= 10) . length

而这不是?

isValid :: String -> Bool
isValid =  length . (>= 10)

===>

    • Couldn't match type ‘Int’ with ‘Bool’
      Expected type: String -> Bool
        Actual type: String -> Int

他们不一样吗?函数应用程序是否从右到左工作,反之亦然?

标签: haskell

解决方案


isValid = (>= 10) . length等价于isValid x = (length x) >= 10,但isValid = length . (>= 10)等价于isValid x = length (x >= 10),这显然是胡说八道。当用组合(不应用)函数时.,最右边的函数应用于输入,左边的函数接收右边函数的输出作为输入。


推荐阅读