三重对对免点方式
Triple to pair point-free way
这是一个将三元素元组的前两个元素相乘的函数:
f (a, b, _) = a * b
我很好奇是否有可能使这个函数无点。对于像 f = uncurry . (*)
这样简单的对,如果我们有像 tripleToPair
这样的东西,那将使解决方案显而易见,但该函数也是通过模式匹配以最直接的方式编写的。
我问了大神pointfree.io,却返回错误500,这还能行吗?纯理论题,我觉得功能还是不错的
最简单的方法是 liftA2
(ab) 对函数使用 Applicative
实例
import Control.Applicative
-- This two functions are defined in module Data.Tuple.Extra from extra package
-- You could use lenses too, I guess
fst3 (a,_,_) = a
snd3 (_,b,_) = b
f = liftA2 (*) fst3 snd3
这是一个将三元素元组的前两个元素相乘的函数:
f (a, b, _) = a * b
我很好奇是否有可能使这个函数无点。对于像 f = uncurry . (*)
这样简单的对,如果我们有像 tripleToPair
这样的东西,那将使解决方案显而易见,但该函数也是通过模式匹配以最直接的方式编写的。
我问了大神pointfree.io,却返回错误500,这还能行吗?纯理论题,我觉得功能还是不错的
最简单的方法是 liftA2
(ab) 对函数使用 Applicative
实例
import Control.Applicative
-- This two functions are defined in module Data.Tuple.Extra from extra package
-- You could use lenses too, I guess
fst3 (a,_,_) = a
snd3 (_,b,_) = b
f = liftA2 (*) fst3 snd3