在几层单层中操纵价值



我的目标是从 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})

最新更新