Haskell 忽略函数的第二个参数

Haskell 忽略函数的第二个参数,haskell,Haskell,假设我有这个代码: import qualified Data.Map as Map import qualified Data.Set as Set let s = Set.fromList [0,1,2] m = Map.fromList [(1,"a"),(2,"b"),(3,"c")] in Map.filterWithKey (\k _ -> Set.member k s) m 我想去掉lambda表达式: Map.filterWithKey (flip Set.me

假设我有这个代码:

import qualified Data.Map as Map
import qualified Data.Set as Set

let s = Set.fromList [0,1,2]
    m = Map.fromList [(1,"a"),(2,"b"),(3,"c")]
in Map.filterWithKey (\k _ -> Set.member k s) m
我想去掉lambda表达式:

Map.filterWithKey (flip Set.member s . const) m
但这并不适用于编译。我不明白为什么。。请帮忙

Couldn't match type ‘Bool’ with ‘[Char] -> Bool’
Expected type: (b0 -> a) -> Set.Set (b0 -> a) -> [Char] -> Bool
  Actual type: (b0 -> a) -> Set.Set (b0 -> a) -> Bool
In the first argument of ‘flip’, namely ‘Set.member’
In the first argument of ‘(.)’, namely ‘flip Set.member s’

我不确定是什么让你认为组合应该是另一种方式,但它没有多大意义——毕竟,
const
返回一个(常量)函数,但
Set。member
不能在其任何参数中使用函数。

谢谢。我认为
const
返回它的第一个参数。它返回一个函数,然后返回它的第一个参数。立即返回其第一个参数的函数是
id
@akonsu
const
接受两个参数并返回第一个参数。通过使用curry,这相当于获取一个参数
a
,并返回常量函数
\x->a
const=\x y->x
const
,这正是我想要的<代码>翻转常量可能也很方便。(
翻转f x y=f y x
  \k _ -> Set.member k s
≡ \k -> \_ -> Set.member k s
≡ \k -> const $ Set.member k s
≡ \k -> const $ flip Set.member s k
≡ const . flip Set.member s
≡ const . (`Set.member`s)