-- >>> set (choice fstL sndL) (Left ("abc", 7)) "def"
-- Left ("def",7)
--
-- >>> set (choice fstL sndL) (Right ("abc", 7)) 8
-- Right ("abc",8)
choice::
Lensstab
->Lensqrab
->Lens(Eithersq)(Eithertr)ab
choice=
error"todo: choice"
-- | An alias for @choice@.
(|||)::
Lensstab
->Lensqrab
->Lens(Eithersq)(Eithertr)ab
(|||)=
choice
infixr2|||
----
typeLens'ab=
Lensaabb
cityL::
Lens'LocalityString
cityL=
Lens
(\p(Localitycty)->fmap(\c'->Localityc'ty)(pc))
stateL::
Lens'LocalityString
stateL=
Lens
(\p(Localitycty)->fmap(\t'->Localityct'y)(pt))
countryL::
Lens'LocalityString
countryL=
Lens
(\p(Localitycty)->fmap(\y'->Localitycty')(py))
streetL::
Lens'AddressString
streetL=
Lens
(\p(Addresstsl)->fmap(\t'->Addresst'sl)(pt))
suburbL::
Lens'AddressString
suburbL=
Lens
(\p(Addresstsl)->fmap(\s'->Addressts'l)(ps))
localityL::
Lens'AddressLocality
localityL=
Lens
(\p(Addresstsl)->fmap(\l'->Addresstsl')(pl))
ageL::
Lens'PersonInt
ageL=
Lens
(\p(Personand)->fmap(\a'->Persona'nd)(pa))
nameL::
Lens'PersonString
nameL=
Lens
(\p(Personand)->fmap(\n'->Personan'd)(pn))
addressL::
Lens'PersonAddress
addressL=
Lens
(\p(Personand)->fmap(\d'->Personand')(pd))
intAndIntL::
Lens'(IntAnda)Int
intAndIntL=
Lens
(\p(IntAndna)->fmap(\n'->IntAndn'a)(pn))
-- lens for polymorphic update
intAndL::
Lens(IntAnda)(IntAndb)ab
intAndL=
Lens
(\p(IntAndna)->fmap(\a'->IntAndna')(pa))
-- |
--
-- >>> get (suburbL |. addressL) fred
-- "Fredville"
--
-- >>> get (suburbL |. addressL) mary
-- "Maryland"
getSuburb::
Person
->String
getSuburb=
error"todo: getSuburb"
-- |
--
-- >>> setStreet fred "Some Other St"
-- Person 24 "Fred" (Address "Some Other St" "Fredville" (Locality "Fredmania" "New South Fred" "Fredalia"))
--
-- >>> setStreet mary "Some Other St"
-- Person 28 "Mary" (Address "Some Other St" "Maryland" (Locality "Mary Mary" "Western Mary" "Maristan"))
setStreet::
Person
->String
->Person
setStreet=
error"todo: setStreet"
-- |
--
-- >>> getAgeAndCountry (fred, maryLocality)
-- (24,"Maristan")
--
-- >>> getAgeAndCountry (mary, fredLocality)
-- (28,"Fredalia")
getAgeAndCountry::
(Person,Locality)
->(Int,String)
getAgeAndCountry=
error"todo: getAgeAndCountry"
-- |
--
-- >>> setCityAndLocality (fred, maryAddress) ("Some Other City", fredLocality)
-- (Person 24 "Fred" (Address "15 Fred St" "Fredville" (Locality "Some Other City" "New South Fred" "Fredalia")),Address "83 Mary Ln" "Maryland" (Locality "Fredmania" "New South Fred" "Fredalia"))
--
-- >>> setCityAndLocality (mary, fredAddress) ("Some Other City", maryLocality)
-- (Person 28 "Mary" (Address "83 Mary Ln" "Maryland" (Locality "Some Other City" "Western Mary" "Maristan")),Address "15 Fred St" "Fredville" (Locality "Mary Mary" "Western Mary" "Maristan"))