如何从Haskell对象中获取数据?

时间:2018-03-23 17:31:00

标签: haskell

哈斯克尔初学者,提前抱歉这个愚蠢的问题。我来自Python,只是想知道如何从Haskell数据类型中获取数据(即字符串)。

假设我有rdf4h使用的RDF图,我可以从中获取Node个对象。这就是我print时的样子:

LNode (PlainL "Stories from the Italian Poets: with Lives of the Writers, Volume 1")

如何从中获取字符串值? (即,“来自...的故事”)我搜索了Hoogle :: Node -> Text,但我似乎找不到任何东西。我似乎也无法在Data.RDF.Types或类似的任何地方找到合适的功能。我确信这里有一些非常明显的东西。

2 个答案:

答案 0 :(得分:7)

获取数据类型字段的最常用方法是在构造函数上进行模式匹配。 LValue类型有三个构造函数PlainL !TextPlainLL !Text !TextTypedL !Text !Text

handleLValue lvalue =
  case lvalue of
    PlainL a    -> ... do something with the value a here
    PlainLL a b -> ... do something with the values a and b here
    TypedL a b  -> ... ditto

答案 1 :(得分:2)

以下是Data.RDF.Types的相关类型:

data Node = UNode !T.Text 
          | BNode !T.Text 
          | BNodeGen !Int 
          | LNode !LValue deriving (Generic,Show)

data LValue = PlainL !T.Text 
            | PlainLL !T.Text !T.Text 
            | TypedL !T.Text !T.Text deriving (Generic,Show)

所以,如果你有

x = LNode (PlainL "Stories from the Italian Poets: with Lives of the Writers, Volume 1")

你只是模式匹配:

let (LNode (PlainL t)) = x
in t