我的目标是从 Employment
撤出 numVal4
- 但要从 MyEmployment
value的级别进行。
data Employment = Employment
{ textVal1 :: Text
, textVal2 :: Text
, textVal3 :: Text
, numVal4 :: Money }
data MyEmployment = MyEmployment Person Employment
MyEmployment (Person "Me") (Employment "This" "is a" "test" 55)
fmap . fmap (fromInteger (Employment _ _ _ x)) MyEmployment
编辑:
我应该拥有更具体的蜜蜂。我需要从DMAP中访问该值。实际代码看起来更接近这一点:
thing = dmap ! (Some_Function . Some_OtherFunction $ MyEmployment)
我需要从Employment
的内部获取数值,并带有某种包装器,例如:
thing = fmap (fromIntegral (Employment _ _ _ x)) (dmap ! (Some_Function . Some_OtherFunction $ MyEmployment)
除了所有语法问题,我认为您要做的是以下内容。
这就是您声明数据类型的方式:
data Employment = Employment
{ textVal1 :: Text
, textVal2 :: Text
, textVal3 :: Text
, numVal4 :: Money }
注意不是=
的::
s,并记下凹痕。
MyEmployment
似乎是一种数据类型, MyEmployment :: Person Employment
我认为您实际上是卑鄙的
data MyEmployment = MyEmployment Person Employment
在此设置中,如果要采用类型MyEmployment
的值,并将函数应用于Employment
字段的numVal4
字段,记录语法允许您写入:
foo :: (Money -> Money) -> MyEmployment -> MyEmployment
foo f (MyEmployment p e@(Employment {numVal4 = nv}))
= MyEmployment p ( e {numVal4 = f nv})