gpt4 book ai didi

Haskell 仅将函数箭头应用于结果类型?

转载 作者:行者123 更新时间:2023-12-04 05:45:46 24 4
gpt4 key购买 nike

在 Haskell 中是否可以将函数箭头类型构造函数 (->) 仅应用于其右侧类型(例如:(-> a))以获得类型为 * -> * 的类型构造函数?

最佳答案

不,目前是不可能的。 Haskell 的类型系统存在某些限制,使其在大多数情况下都非常有用和方便,这就是这些限制之一。您最好的选择是使用新类型。

newtype FuncFlip r a = FuncFlip { unFuncFlip :: a -> r }

新类型只是帮助编译器知道如何正确进行类型检查和执行类型导向调度(类型类)的标签。大概您想翻转类型参数以提供一些类型类实例。这只是意味着无论何时你想使用那个类型类的函数,你都必须用 FuncFlip 装饰任何特定的输入。 ,并使用 unFuncFlip 取消修饰任何特定输出.这比预期的要冗长一些,但实际上并没有那么糟糕,因为它迫使您明确标识要使用的类型类的哪个实例。

您可以创建 Newtype 的实例为此,这可能会或可能不会对您方便。
instance Newtype (FuncFlip r a) (a -> r) where
pack = FuncFlip
unpack = unFuncFlip

进一步阅读: Are there "type-level combinatos?"

关于Haskell 仅将函数箭头应用于结果类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708935/

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