[xmonad] stupid newbie question about `removeKeysP`

Gwern Branwen gwern0 at gmail.com
Wed May 5 16:31:56 EDT 2010


On Wed, May 5, 2010 at 4:12 PM, Patrick Brisbin <pbrisbin at gmail.com> wrote:
> On 05/05/10 at 10:04pm, Anders Engström wrote:
>> Try this (untested code, note the '$'):
>> main = xmonad $ gnomeConfig
>>         {terminal       = "urxvtcd"
>>         }
>>         `removeKeysP` ["M-b","M-."]
>>
>> Which is equivalent to, or a shorthand for:
>> main = xmonad (gnomeConfig
>>         {terminal       = "urxvtcd"
>>         }
>>         `removeKeysP` ["M-b","M-."])
>>
>>
>> `removeKeysP` is in your code applied to the arguments:
>> arg1: xmonad gnomeConfig {terminal       = "urxvtcd"}
>> arg2: ["M-b","M-."]
>>
>> Hope that helps.
>> /Anders
>>
>> On Wed, May 5, 2010 at 21:37, Jonas Bygdén <jonaslistor at gmail.com> wrote:
>> > Hi,
>> > I'm slowly going nuts here.
>> > This is my complete xmonad.hs file:
>> > -------------------------------------------
>> > import XMonad
>> > import XMonad.Config.Gnome
>> > import XMonad.Util.EZConfig
>> > main = xmonad gnomeConfig
>> >         {terminal       = "urxvtcd"
>> >         }
>> >         `removeKeysP` ["M-b","M-."]
>> > -------------------------------------------
>> > And when I try to use it I get these errors:
>> > -------------------------------------------
>> > xmonad.hs:5:7:
>> >     Couldn't match expected type `XConfig l'
>> >            against inferred type `IO ()'
>> >     In the first argument of `removeKeysP', namely
>> >         `xmonad (gnomeConfig {terminal = "urxvtcd"})'
>> >     In the expression:
>> >           xmonad (gnomeConfig {terminal = "urxvtcd"})
>> >         `removeKeysP`
>> >           ["M-b", "M-."]
>> >     In the definition of `main':
>> >         main = xmonad (gnomeConfig {terminal = "urxvtcd"})
>> >              `removeKeysP`
>> >                ["M-b", "M-."]
>> > Please check the file for errors.
>> > -------------------------------------------
>> > Where have I gone wrong?
>> > /Jonas
>> > _______________________________________________
>> > xmonad mailing list
>> > xmonad at haskell.org
>> > http://www.haskell.org/mailman/listinfo/xmonad
>> >
>> >
>> _______________________________________________
>> xmonad mailing list
>> xmonad at haskell.org
>> http://www.haskell.org/mailman/listinfo/xmonad
>
> Don't you still need a 'do' somewhere in there?
>
>  main = do
>    xmonad $ gnomeConfig
>    { terminal = "urxvtcd"
>    }
>    `removeKeysP` ["M-b", "M-."]
>
> should compile.
>
> I think all on one line looks more readable though:
>
>  main = do
>    xmonad $ gnomeConfig { terminal = "urxvtcd" } `removeKeysP` ["M-b", "M-."]
>
>
> Apologies if this doesn't work, I haven't compiled it myself.

No; do-notation is only necessary if you're using any syntax like the
let bindings or <- or newlines - stuff which desugars to use of
monadic functions like >> or >>=. This is all straight function calls.

Hlint will even tell you that the do is unnecessary:

hlint foo.hs
foo.hs:1:9: Error: Redundant do
Found:
  do xmonad $
       gnomeConfig{terminal = "urxvtcd"} `removeKeysP` ["M-b", "M-."]
Why not:
  xmonad $
    gnomeConfig{terminal = "urxvtcd"} `removeKeysP` ["M-b", "M-."]

Found 1 suggestion (1 error)

-- 
gwern


More information about the xmonad mailing list