[Haskell-beginners] Syntactic sugar to insert into a Map?
Mateusz Kowalczyk
fuuzetsu at fuuzetsu.co.uk
Sun Jul 21 17:14:07 CEST 2013
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 21/07/13 15:23, martin wrote:
> Am 07/21/2013 03:08 PM, schrieb Mateusz Kowalczyk:
>> On 21/07/13 13:36, martin wrote:
>>> Hello all,
>
>>> What is the best way to enter several (key, value) pairs into a
>>> Map, such that the code "looks nice", kind of like the
>>> do-notation with monads.
>
>>> I suppose this question is not really specific to a Map. It is
>>> about chaining functions with a type of a1 ->...-> an -> b ->
>>> b.
>
>>> Is there any syntactic sugar available?
>
>>> _______________________________________________ Beginners
>>> mailing list Beginners at haskell.org
>>> http://www.haskell.org/mailman/listinfo/beginners
>
>> There's no sugar but that doesn't mean you have to have
>> something that doesn't look nice! Hackage tells me it's an
>> instance of monoid.
>
>> *Main Data.Monoid Data.Map> singleton 1 2 fromList [(1,2)] *Main
>> Data.Monoid Data.Map> singleton 1 2 <> singleton 2 3 fromList
>> [(1,2),(2,3)] *Main Data.Monoid Data.Map> singleton 1 2 <>
>> singleton 2 3 <> singleton 4 3 fromList [(1,2),(2,3),(4,3)]
>
>> There's of course fromList *Main Data.Monoid Data.Map> fromList
>> [(1, 2), (3, 4)] <> fromList [(7, 2), (8, 4)] fromList
>> [(1,2),(3,4),(7,2),(8,4)]
>
>> *Main Data.Monoid Data.Map> fromList $ zip [1 .. 3] ['a' .. 'z']
>> fromList [(1,'a'),(2,'b'),(3,'c')]
>
>> I don't think that fromList looks nice enough, especially
>> considering that you can split it across many lines etc. It'd be
>> easier to help if you could be more specific about what you're
>> looking for.
>
> I just want to insert several key/value pairs, something like
>
> Map.empty insert key1 val1 insert key2 val2 return theMap
>
> I know I can achieve this with dollars and by reversing the order,
> such that Map.empty is at the end. But I don't think it is
> pretty.
>
>
> _______________________________________________ Beginners mailing
> list Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
Map is not a monad so you can't use do. `do' is just sugar for >>= so
if you don't have a monad, can't use it. You could try running it
inside of the State monad but I think you'll find that it's a lot of
hassle to do and is just not worth it.
- --
Mateusz K.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (GNU/Linux)
iQIcBAEBAgAGBQJR6/q/AAoJEM1mucMq2pqXqSwP/0GBUd28y34DPystvY8+Sgbs
363IPm1QDTXrX7gkc3OTelOPoqgZmzlF1uKu3OGcjlD9mxqiyTv4QPXSjieslpe3
QSE6O/5BqQYokbBfmVyEuCHamr4z/ta53F/W9IA7ElIvXb6cMupy78VB+Qnybsss
G3JOZeDCG5CMuBSmaDpk3iN8LGEQxbDgriEYraC1N5GFv2dQ+5vcRHn4XD8C8yH9
2WAAlIHncKTPNX7hWnuiIYzj2fwhbtBa1oImtufEsAjKfmQHoorG7ZBG0SSKzk9X
lxpxLNW/Rh0L3EYIprUl2PVCjC/r3FRT2v+TtToLsHuFt8RYM0bCMk/gM8KhjKxg
LXNUKlCiKdAK9vFF8/5NHGD7G8yAueqR5tY6YpLoL21NL3SLuFM2DFFT5nQNtHO4
awa4ie1e0rA1iRcho/r/TH1Pr3i/AN1uNyQCDyEQFHloiyv2x8dpEDxMnPfIJe44
teEapLwWy/y0qpRuXn2wiyrQsVmr+9F1In/DfE/KR9gYsbnvGZPIGiZ9JWfgQ5z1
3FRVW5gVDyt/mHKXxt0c9CPI3lA0cuLTrUL6UrBRzfajSCIzvbVW/MpzJ4h/5VDj
Tf+pggHVQbiLnGCsGwVtj1p1CfDUp1yqF3SmoDaeODIY0qJ+gHL9rR49VVRB1eo9
MHippyvD6ZiyqwdxfAjH
=bS97
-----END PGP SIGNATURE-----
More information about the Beginners
mailing list