Ich habe eine harte Zeit lesen die Typen in der Control.Lens.Wrapped-Modul und ich finde nicht viel anderes darüber geschrieben oder die newtype
-Bibliothek, auf der es anscheinend basiert. Insbesondere frage ich mich, welche Art von Dingen ich tun kann, während ich im newtype
Wrapper bleibe. Nehmen wir zum Beispiel an, ich habe zwei Listen, die sich in einem Data.Monoid.Sum
Wrapper befinden. Gibt es eine Möglichkeit wie ich die ++
Listen leicht auflisten kann und einen neuen Wert noch in einem Sum
Wrapper bekommen kann? Ich würde eine Funktion will, dass monomorph, etwa wie folgt aussieht:Verwendet von Wrapped typeclass in Control.Lens
canIdoThis :: ([a] -> [a] -> [a]) -> Sum [a] -> Sum [a] -> Sum [a]
so, dass ich so etwas wie
canIdoThis (++) (Sum [1,2]) (Sum [3,4])
und Sum [1,2,3,4]
erhalten tun könnte. (Natürlich wäre canIdoThis
auch auf Product [a]
arbeiten, etc.)
Alle anderen Tipps oder nur eine allgemeine aufzuschreiben aller Güte eines mit Control.Lens.Wrapped
tun könnte, ist sehr geschätzt.
Verwenden Sie einfach 'Sum' als zufälliges Beispiel für einen' newtype' Wrapper mit 'Wrapped' Instanzen. Manchmal habe ich Sachen eingepackt und ich möchte operieren, was drin ist. –
'coerce (++) (Sum [1,2,3]) (Summe [4,5,6]) :: Sum [Int]' funktioniert nicht in GHCi. –
Es weiß nicht, dass das '[1,2,3]' auch '[Int]' ist, oder dass das (++) '[Int]' s verketten soll, im Gegensatz zu, sagen wir, '[ Summe Int] 's. 'coerce ((++) :: [Int] -> [Int] -> [Int]) (Summe [1,2,3] :: Summe [Int]) (Summe [4,5,6] :: Sum [Int]) :: Sum [Int] 'funktioniert. – Gurkenglas