[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