使用没有模式匹配的数据类型的值

时间:2012-05-16 21:38:32

标签: haskell types pattern-matching ghc

在Haskell中是否有任何方法(使用ghc),直接使用数据类型的值而不使用模式匹配,就像在面向对象的编程语言中一样(例如obj.a或obj-> ; a)?

我正在寻找类似的东西:

data Obj = Obj {a :: Int, b :: Int}

some :: Obj -> Int
some o = o.a

3 个答案:

答案 0 :(得分:3)

最接近的是Haskell的记录,如下所示:

data Obj = Obj {a :: Int, b :: Int}

会自动为您提供以下功能:

a :: Obj -> Int
b :: Obj -> Int

可以像普通函数一样调用(为了清晰起见,键入注释):

(a (o :: Obj)) :: Int

Learn you a Haskell有很好的章节。

答案 1 :(得分:2)

是的,你已经到了一半了。通过使用记录语法,您已经自动创建了函数

a (Obj x _) = x
b (Obj _ x) = x

因此,您可以使用a访问a myObject值。

但是,正如你所看到的,它确实归结为模式匹配。

答案 2 :(得分:1)

RecordWildCards语言扩展程序也很有帮助。

{-# LANGUAGE RecordWildCards #-}

data Obj = Obj {a :: Int, b :: Int}

some :: Obj -> Int
some Obj{..} = a + b