lenses

    0熱度

    1回答

    TL展開;博士:是否有可能使用任何lens家族的抽象的包裝/解開任意newtype(即提供了一種用於這樣的抽象的實例)? 我會通過一個基於真實故事的簡單示例來激發我的問題。假設我定義以下newtype: newtype FreeMonoid a = FreeMonoid { asMap :: Map a Int } 它是用來表示形式方面: a0 <> a1 <> ... <> an-1 我

    6熱度

    2回答

    import Control.Lens import Control.Lens.TH data Foo = Foo { _bar, _baz :: Int } makeLenses ''Foo 現在,如果我要修改這兩個int字段,我可以做 barbaz :: Setter' Foo Int barbaz = sets $ \foo f -> foo & bar %

    0熱度

    1回答

    我在纏繞這條管道時遇到了麻煩。給定一組學生,我想映射它們,根據現有屬性的值(grade)添加一個新屬性(icon)。我通過忽略現在的映射部分並將重點放在每個單獨的問題上,將問題分解成更小的部分。 條件 爲此,我決定用R.cond getter和setter 我使用的鏡頭爲這個 全碼 const student = { "studentName" : "Nancy", "grad

    2熱度

    1回答

    我有一些嵌套的記錄(簡化到相關字段)。 data GameS = GameS { _game_data_gs :: GameData } data GameData = GameData { _players_gd :: PlayerMap } data PlayerMap = PlayerMap { _p_map :: Map PlayerName Player } data Playe

    0熱度

    1回答

    我可能正在考慮這種錯誤的方式,但是我在Scala中遇到了在使用構造函數擴展某些類的類時使用鏡頭的問題。 class A(c: Config) extends B(c) { val x: String = doSomeProcessing(c, y) // y comes from B } 我想創建一個Lens變異這一類,但我有麻煩這樣做。這是我想什麼能夠做到: val l = Le

    -2熱度

    1回答

    我開始使用鏡頭,直到現在我一直無法在我正在編寫的代碼庫的具體部分中使用它們。我的目標是通過在現有的節點中添加新節點來更新玫瑰樹結構,例如Data.Tree中的玫瑰樹結構。要做到這一點我認爲這將是有意義的標識具有唯一ID的每個節點,因此它看起來就像是: type MyTree = Tree Id type Path = [Id] addToTree :: MyTree -> MyTree ->

    2熱度

    1回答

    我有一個狀態鹵素成分,包括像這樣的鏡頭: import Optic.Core (Lens', lens) type State = { userName :: String , password :: String , formError :: String } _userName :: Lens' State String _userName =

    3熱度

    1回答

    我想創建一些代碼,可以採取任何遞歸語法數據類型和該數據類型的任何表達式,併產生一個相同類型的所有子表達式的列表,建立起來的,種類就像一個scan這個類型的遞歸。 我已經爲伴隨的玩具計算器語法類型EExp編寫了兩個手動示例。第一個示例使用Lens庫中的棱鏡和透鏡,僅適用於一個eg1示例表達式,而第二個函數僅使用手動代碼,但可用於任何EExp表達式。 理想情況下,我可以使用模板哈希克爾或其他東西來自動

    2熱度

    1回答

    較短的方式是否有寫下面的代碼片段的短/清潔方式: fromMaybe "" $ fmap (^. fullName) (bi ^. bookerContact) 這裏bi ^. bookerContact可能導致Maybe Contact紀錄,這也是爲什麼要fmapped ^. fullName需求。在嵌套遍歷之後,如果我們以Nothing結尾,我們使用fromMaybe ""將其默認爲空字符

    2熱度

    1回答

    修改哈斯克爾嵌套記錄說我有一個嵌套的結構如下: data Bar = Bar { _id :: Integer, _bars :: [Bar] } data Foo = Foo { _bars :: [Bar] } 而且我有一個Foo與各種id個一堆Bars: foo = Foo [Bar 1 [Bar 2], Bar 3 [Bar 4, Bar 5]] 怎麼辦,也許使用鏡頭,我修改fo