在Haskell中是否有任何方法(使用ghc),直接使用数据类型的值而不使用模式匹配,就像在面向对象的编程语言中一样(例如obj.a或obj-> ; a)?
我正在寻找类似的东西:
data Obj = Obj {a :: Int, b :: Int}
some :: Obj -> Int
some o = o.a
答案 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