gpt4 book ai didi

oop - 相当于在 Haskell 中创建对象

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

我试图了解如何使用以下内容:

data Maybe a = Nothing | Just a
data Either a b = Left a | Right b

根据我的理解,这些是参数化的代数数据类型。来自 OO 背景,我现在想创建这些对象的实例。如果我做这样的事情:
x = Maybe 10

现在是一个子类/子代数数据类型,还是想知道那个对象叫什么。我会假设它是某种类型。如果是这样,那么我想知道如何创建 x 的实例.在面向对象的土地上,我会这样做:
myinstance = new x

这就是来到 Haskell 让我迷失的地方,我不知道去哪里搜索。总结几个问题:
  • 什么样的对象x在上面。如 Maybe是参数化数据类型,那么 x 是 ~something~ 类型,不确定。
  • 如何创建 x 的实例.
  • x的实例是什么对于Maybe,因为我们传递了10。想知道实例值是否为10 并且类型为Int。
  • 最佳答案

    没有 Maybe 10 这样的东西在 haskell 。有Maybe Int ,这是一种类型。
    我们直接创建某种类型的值,如

    x :: Maybe Int
    x = Just 10
    或者
    y :: Maybe Int
    y = Nothing
    简单直接。

    编辑: Maybe是一个类型构造函数。 JustNothing是数据构造器。通过写作 Maybe Int我们“创建”了一个类型。不能有定义 z :: Maybe ; z = ..... .
    这就是所谓的“种类”: Maybe的种类是 * -> * ,而例如 Int* Maybe Int也是如此的。试试 :k在 GHCi 提示符下看到这个:
    ~> :k Int
    Int :: *

    ~> :k Maybe
    Maybe :: * -> *

    ~> :k Maybe Int
    Maybe Int :: *
    当然,我们在写 "Maybe Int 时实际上并没有创建一个新类型。 ,就是这样 Maybe本身还不是一种事物(“事物”的类型具有种类 * )。 Maybe 的定义是什么创建了类型 Maybe a ,对于任何 a我们可能会使用。这被称为参数多态性。
    所以在 Haskell 中,我们没有对象(在 OOP 意义上)。我们有值和类型。

    关于oop - 相当于在 Haskell 中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50462095/

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