访问Haskell中的自定义类型变量的元素?

哈斯克尔

我有一种叫做动物的类型,其中包括动物的家庭和动物的颜色。

type Animal family = [(family, color)]

data Family = Ape | Bear | Bird | Cat | Dog | Chicken

data Color = Brown | Black | White | Other

我还具有尝试访问动物的科目和颜色的功能。我要问的只是简单地如何从函数中访问这些元素。例如,在大多数面向对象的语言中,我们将使用animal.family之类的元素来访问这些元素

animalFunction :: Animal -> String
animalFunction animal
    | animal.family == Ape = "This animal is an ape."
Bartek Banachewicz
type Animal family = [(family, color)]

首先,这不应该编译;如果更改为[(family, Color)]

这是一个类型别名,表示这Animal意味着(参数化的家庭类型,颜色)元组1列表,这很可能不是您想要的。

正如@rightfold所建议的,您可能想要

data Animal = Animal Family Color

或者,使用记录语法:

data Animal = Animal { family :: Family, color :: Color }

然后,您的功能:

-- record version
animalFunction :: Animal -> String
animalFunction animal
    | family animal == Ape = "This animal is an ape."
    | ...

笔记: family :: Animal -> Family

或者,您可以仅将模式匹配2

animalFunction (Animal f c)
    | f == Ape = ...

甚至:

animalFunction (Animal Ape _) = ...

但是,您可能正在寻找的是Show将某些东西转换为String3的通用惯用方式

data Family = Ape | Bear | Bird | Cat | Dog | Chicken deriving (Show)

instance Show Animal where
    show (Animal f _) = "This animal is an " ++ (show f) ++ "."

1对。

2它同时适用于记录和非记录,因为记录只会真正Record -> Member为每个成员引入类型的getter ,而它们不会修改结构

3在其他语言中,您可以考虑为类实现“ ToString”接口。这太简单了,但是足以理解此示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell:访问自定义列表类型的元素

来自分类Dev

Haskell访问自定义数据类型中的字段

来自分类Dev

遍历自定义类型并访问haskell中的属性

来自分类Dev

访问自定义Haskell数据类型的函数

来自分类Dev

在Haskell中自定义列表中的元素相乘

来自分类Dev

如何在Go中创建自定义类型元素的自定义类型数组?

来自分类Dev

在PostgreSQL C函数中访问自定义类型的数组

来自分类Dev

如何访问Knockout组件中的自定义元素?

来自分类Dev

如何从Polymer模板中访问自定义元素的主体?

来自分类Dev

访问嵌套的Polymer自定义元素中的JavaScript方法

来自分类Dev

访问自定义元素中的子对象

来自分类Dev

Ansible:从自定义模块中访问主机/组变量

来自分类Dev

在Ruby on Rails中访问自定义标头变量

来自分类Dev

在自定义Portlet中访问Liferay全局速度变量

来自分类Dev

如何访问变量中的自定义属性的值?

来自分类Dev

在Ruby on Rails中访问自定义标头变量

来自分类Dev

在自定义Portlet中访问Liferay全局速度变量

来自分类Dev

访问集合文档中的自定义前台变量

来自分类Dev

访问自定义 ScopedRateThrottle 中的 URL 参数变量

来自分类Dev

检查变量是否为Erlang中的自定义类型?

来自分类Dev

Elm:自定义类型的访问值

来自分类Dev

如何访问自定义元素的主机

来自分类Dev

如何访问自定义元素的主机

来自分类Dev

访问自定义元素的子节点?

来自分类Dev

自定义UIView变量/属性访问

来自分类Dev

自定义变量类型Lua

来自分类Dev

在Swift中泛型类型的where子句中访问自定义协议的关联类型

来自分类Dev

无法使用Javascript访问Polymer自定义元素中的Canvas元素

来自分类Dev

无法使用Javascript访问Polymer自定义元素中的Canvas元素

Related 相关文章

  1. 1

    Haskell:访问自定义列表类型的元素

  2. 2

    Haskell访问自定义数据类型中的字段

  3. 3

    遍历自定义类型并访问haskell中的属性

  4. 4

    访问自定义Haskell数据类型的函数

  5. 5

    在Haskell中自定义列表中的元素相乘

  6. 6

    如何在Go中创建自定义类型元素的自定义类型数组?

  7. 7

    在PostgreSQL C函数中访问自定义类型的数组

  8. 8

    如何访问Knockout组件中的自定义元素?

  9. 9

    如何从Polymer模板中访问自定义元素的主体?

  10. 10

    访问嵌套的Polymer自定义元素中的JavaScript方法

  11. 11

    访问自定义元素中的子对象

  12. 12

    Ansible:从自定义模块中访问主机/组变量

  13. 13

    在Ruby on Rails中访问自定义标头变量

  14. 14

    在自定义Portlet中访问Liferay全局速度变量

  15. 15

    如何访问变量中的自定义属性的值?

  16. 16

    在Ruby on Rails中访问自定义标头变量

  17. 17

    在自定义Portlet中访问Liferay全局速度变量

  18. 18

    访问集合文档中的自定义前台变量

  19. 19

    访问自定义 ScopedRateThrottle 中的 URL 参数变量

  20. 20

    检查变量是否为Erlang中的自定义类型?

  21. 21

    Elm:自定义类型的访问值

  22. 22

    如何访问自定义元素的主机

  23. 23

    如何访问自定义元素的主机

  24. 24

    访问自定义元素的子节点?

  25. 25

    自定义UIView变量/属性访问

  26. 26

    自定义变量类型Lua

  27. 27

    在Swift中泛型类型的where子句中访问自定义协议的关联类型

  28. 28

    无法使用Javascript访问Polymer自定义元素中的Canvas元素

  29. 29

    无法使用Javascript访问Polymer自定义元素中的Canvas元素

热门标签

归档