gpt4 book ai didi

function - 如何根据类型定义函数?

转载 作者:行者123 更新时间:2023-12-05 08:25:02 26 4
gpt4 key购买 nike

我正在尝试定义一个类型为 (m -> n -> l) -> (m -> n) -> m -> l 的简单 Haskell 函数。我认为它需要定义为 f g h x = f g (h x),但显然事实并非如此。我该如何更正此功能?

最佳答案

基于签名,唯一合理的实现是:

f :: (m -> n -> l) -> (m -> n) -> m -> l
f g h x = g x (h x)

这是有道理的,因为我们有两个函数 g :: m -> n -> lh :: m -> n , 和一个值 x :: m .我们应该构造一个类型为 l 的值.唯一的方法是使用函数 g .对于类型为 m 的参数我们可以合作 x ,对于第二个参数,我们需要一个 n 类型的值,我们没有这样的值(value),但我们可以通过应用 h 来构造一个在 x .自 h x类型为 h x :: n ,因此我们可以将其用作 g 的第二个参数.

此函数已定义:它是 (<*>) :: Applicative f => f (n -> l) -> f n -> f l 的特例与 f ~ (->) m .

Djinn是一种推理类型的工具,因此根据其签名生成函数定义。如果用 f :: (m -> n -> l) -> (m -> n) -> m -> l 查询,我们得到:

f :: (m -> n -> l) -> (m -> n) -> m -> l
f a b c = a c (b c)

这是相同的功能(只是它使用了其他变量名)。

关于function - 如何根据类型定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69285018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com