相关疑难解决方法(0)

镜头,fclabels,数据访问器 - 用于结构访问和变异的库更好

至少有三个流行的库用于访问和操作记录字段.我所知道的是:数据访问器,fclabels和镜头.

我个人开始使用数据访问器,现在我正在使用它们.然而最近在haskell-cafe上有一个fclabels优越的意见.

因此,我对这三个(也许更多)库的比较感兴趣.

haskell record data-structures lenses

170
推荐指数
1
解决办法
2万
查看次数

如何仅修改记录的一个字段而不完全重写它?

这是我第二次解决这个问题... 这是第二次在与Statemonad 一起工作时,显然一个州喜欢由许多领域组成,而不仅仅是一个领域

我有一个元组:

type CurrentState = (Int, Int, String, [Int], CustType1, CustType2, CustType3 )
Run Code Online (Sandbox Code Playgroud)

假设需要对该元组进行简单的转换...第二个Int是一种计数器,它需要增加:

let incrementCounter currState@(foo, bar, baz, fizz, buzz, blah, yadda) =
    ( foo, bar+1, baz, fizz, buzz, blah, yadda )
Run Code Online (Sandbox Code Playgroud)

哇。很多打字。现在,既然增加计数器并不是该元组的唯一可能操作,那么显然会有更多此类功能……混乱很快就会变得令人讨厌。

如果我们将元组更改为记录怎么办?

data CurrentState = CurrentState { foo :: Int, bar :: Int, baz :: String,
                                   fizz :: [Int], buzz :: CustType1,
                                   blah :: CustType2, yadda :: CustType 3 }
Run Code Online (Sandbox Code Playgroud)

现在增加计数器就更糟了!

let incrementCounter currState =
    CurrentState { foo = foo currState, …
Run Code Online (Sandbox Code Playgroud)

haskell tuples record variable-assignment

2
推荐指数
1
解决办法
77
查看次数

为什么我不能将 Int 添加到元组的最后一个 Int 中?

我必须有一个数据 Student 和一个类型类:

data Student = Student {nome :: String
                        , stdNumber :: Int
                        , approvedClass :: Int
                        , failedClass :: Int
                        }
type Class = [Student]
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加到批准的班级编号中,但学生失败了,但我不知道该怎么做。我已经有了这个:

addClasses :: Student-> Int -> Int -> Student
addClasses student aC fC = (student _ _ (approvedClass+aC) (faileClass+fC))
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我不明白为什么?或者如何使它工作?

haskell types tuples list

0
推荐指数
2
解决办法
46
查看次数