我是函数式编程的新手,我正在尝试解决以下练习;
鉴于类型
type Cont r a = (a -> r) -> r
Run Code Online (Sandbox Code Playgroud)
实现以下高阶函数
mapReader :: (a -> b) -> (Cont r a) -> Cont r b
Run Code Online (Sandbox Code Playgroud)
第一步是简化类型,它给出:
mapReader :: (a -> b) -> ((a -> r) -> r) -> (b -> r) -> r
Run Code Online (Sandbox Code Playgroud)
接下来,定义需要在此函数中提供的参数.这些参数是我们得到的三个函数
mapReader :: (a -> b) -> ((a -> r) -> r) -> (b -> r) -> r
mapReader f g h = _1
Run Code Online (Sandbox Code Playgroud)
从这里,我们可以定义以下类型:
f :: a -> b
g :: (a -> r) -> …Run Code Online (Sandbox Code Playgroud)