小编MIJ*_*THY的帖子

Haskell函数组成 - (a - > b) - >(a - > c) - >(b - > c - > d) - >(a - > d)

我想了解如何以无点方式完成以下工作:

withinBounds :: [Int] -> Bool
withinBounds xs = (all (>= 0) xs) && (all (<= 8) xs)
Run Code Online (Sandbox Code Playgroud)

我明白,出于可读性/理智的考虑,以这种方式编写它是优越的,但我想更多地了解如何编写函数.我一直在摸索着如何做到这一点.整个(扩展?)类型签名是

[Int] -> ([Int] -> Bool) -> ([Int] -> Bool) -> (Bool -> Bool -> Bool) -> Bool
Run Code Online (Sandbox Code Playgroud)

我想要的组合的类型签名是

(a -> b) -> (a -> c) -> (b -> c -> d) -> (a -> d)
Run Code Online (Sandbox Code Playgroud)

我用以混蛋 - lambda形式的笔记写下了以下内容.如果有一种方法可以在某种程度上简化lambda演算的问题,那么如果可以解释它也会很棒:

\L@[] ->  \f1@([] -> Bool) -> \f2@([] -> Bool) -> \f3@(Bool -> Bool -> Bool) -> f3.(f1.L).(f2.L) 
Run Code Online (Sandbox Code Playgroud)

在上面,.是应用程序,@正在捕获(所以f3是(Bool - …

lambda haskell pointfree function-composition

7
推荐指数
3
解决办法
337
查看次数

标签 统计

function-composition ×1

haskell ×1

lambda ×1

pointfree ×1