Haskell:类似的数据构造函数和样板板

问题描述 投票:0回答:1

我有一个类型构造函数

Token
,它的所有数据构造函数都采用
Int
(在输入中遇到此标记的位置),也许还有一些有效负载:

data Token = EmptyToken Int   -- just position
    | ValueToken Int Int      -- position and integer payload
    | NameToken Int String    -- position and string payload

当我想从令牌获取位置时,我最终得到了这段相当麻烦的代码:

position :: Token -> Int
position (EmptyToken position)   = position
position (ValueToken position _) = position
position (NameToken  position _) = position

这个样板让我觉得我正在从错误的方向接近整个主题。

使用某些共享属性(如位置)和某些不共享属性对数据进行编码的正确(或推荐)方法是什么?

haskell constructor accessor
1个回答
0
投票

像处理函数一样排除数据类型中的重复项。这是一种方法:

data Positioned a = Positioned Int a
data TokenData = Empty
               | Value Int
               | NameToken String

type Token = Positioned TokenData
© www.soinside.com 2019 - 2024. All rights reserved.