gpt4 book ai didi

haskell - 已弃用的 -XDatatypeContext 的替代方案?

转载 作者:行者123 更新时间:2023-12-03 01:26:55 25 4
gpt4 key购买 nike

假设我想像这样定义一棵树:

{-# LANGUAGE DatatypeContexts #-}
class Node a where
getContent :: (Num a) => a

data (Node a) => Tree a = Leaf a
| Branch a (Tree a) (Tree a)

-XDatatypeContexts 现已弃用。没有它是否可以做类似的事情?

最佳答案

确定数据类型上下文实际上做了您认为的事情吗?这是deprecated because it was basically useless并被广泛认为是一个错误功能,因为它所做的只是迫​​使您添加额外的约束,而不提供任何超出您在没有它的情况下所拥有的类型的保证。

实际上确实有用的替代品是 GADT syntax 。您的类型的等效项如下所示:

data Tree a where
Leaf :: (Node a) => a -> Tree a
Branch :: (Node a) => a -> Tree a -> Tree a -> Tree a

在这种情况下,在创建 Tree 值时需要 Node 约束,但是当对 Tree 值进行模式匹配时,您也会得到自动保证 Node 实例存在,使该实例可用,甚至不需要它在接收 Tree a 作为参数的函数类型中。

关于haskell - 已弃用的 -XDatatypeContext 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888720/

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