Is there a possibility to make different bindings for L_GUI+key and R_GUI+key in XMonad, and if yes then how? Same question is for R_CTRL, R_SFT and R_ALT, but they are not so important for me.
For such questions, one may ask xev what it thinks of your keypress. Here's some example output from me pressing left-control+a and right-control+a:
KeyPress event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207488563, (419,468), root:(2341,612),
state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207489283, (419,468), root:(2341,612),
state 0x4, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) ""
XmbLookupString gives 1 bytes: (01) ""
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207489403, (419,468), root:(2341,612),
state 0x4, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) ""
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207490035, (419,468), root:(2341,612),
state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207538195, (-175,35), root:(1747,179),
state 0x0, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207538595, (-175,35), root:(1747,179),
state 0x4, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) ""
XmbLookupString gives 1 bytes: (01) ""
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207538715, (-175,35), root:(1747,179),
state 0x4, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) ""
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x1400001,
root 0x2a9, subw 0x0, time 4207539227, (-175,35), root:(1747,179),
state 0x4, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
As you can see, though left-control and right-control produce different keypresses when depressed, they produce the same state when held down during another keypress. So one would not be able to differentiate them in my current setup.
If you would like to have them be different modifiers, that can be arranged with xmodmap; however, there is a limited total number of modifiers -- I think maybe four or so. But see the xmodmap documentation for details.