理解类型

时间:2013-02-05 05:29:51

标签: haskell

我正在学习Haskell,我想了解类型。假设我有一个Store类型的对象:

import Data.Map (Map)
import qualified Data.Map as Map

type Variable = String

data Value = IntVal  Int
           | BoolVal Bool

type Store = Map Variable Value

如何使用此对象,说s来获取变量的值?

如何在Store

中保存变量的值

2 个答案:

答案 0 :(得分:3)

在类型声明中,=左侧的标记是类型的名称。 = define 构造函数右侧的值 - 创建该类型实例的函数。

考虑Maybe的定义,这是一种表示失败可能性的简单类型(在许多语言中表示为nullnil):

data Maybe a = Just a | Nothing

这是一个包含两个构造函数的类型:JustNothing

  • Just构造函数表示成功。它需要任何类型的参数,表示要包装的值
  • Nothing构造函数不带参数。它代表失败。

您可以在此处看到,因为Maybe有两个构造函数,所以有两种构造Maybe值的方法。这些类型称为 union 类型。您可以使用模式匹配从联合类型中提取值。有几种语言结构允许模式匹配(letwhere - 绑定,case语句和函数变量绑定)。下面,我们在函数的参数中构造Just值。

fromJust :: Maybe a -> a
fromJust (Just x) = x

假设将其加载到GHCI中。在这里,我们使用Maybe构造函数创建Just的实例,然后再次检索该值:

> let x = Just 20
> fromJust x

  20

以下是模式匹配如何查找您的类型。我们使用您定义的Store构造函数创建Map类型的实例:

> let m = Map "someVar" $ IntVal 0

下面我们定义一个从Map中提取Variable值的函数。

getVariable :: Store -> Variable
getVariable (Map v _) = v

应用该功能:

> getVariable m

  "someVar"

希望您正在学习的资源很快就会涵盖这些内容。如果没有,我建议剂量为Real World Haskell

答案 1 :(得分:2)

以下是一些示例用法:

s :: Store
s = fromList [("key1", IntVal 4), ("key2", BoolVal False)]

lookup "key1" s -- Just (IntVal 4)
lookup "key2" s -- Just (BoolVal False)
lookup "key3" s -- Nothing

s' :: Store
s' = insert "key3" (BoolVal True) s

lookup "key3" s' -- Just (BoolVal True)
相关问题