Xmonad padroniza a depreciação: qual é a configuração futura?

4

Isso pode ser limítrofe entre um SO, já que muita da questão é sobre a programação do haskell. No entanto, no final, é uma questão de configuração.

Antecedentes e pesquisa

Desde 0.12 Xmonad lança esse aviso (várias vezes) em xmonad.errors:

xmonad.hs:15:14: warning: [-Wdeprecations]
    In the use of ‘defaultConfig’
    (imported from XMonad, but defined in XMonad.Config):
    Deprecated: "Use def (from Data.Default, and re-exported by XMonad and XMonad.Config) instead."

E funciona, é apenas um aviso. No entanto, gostaria de entender o que está causando o aviso (estou tentando entendê-lo e falhá-lo por várias horas já). Pela descrição de descontinuação, você poderia imaginar que XMonad.Config não está usando a definição de Default de Data.Default , mas esse não é o caso. Observando o código de XMonad.Config você vê no início import:

import XMonad.Core as XMonad hiding
    (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
    ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
    ,handleEventHook,clickJustFocuses,rootMask,clientMask)
import qualified XMonad.Core as XMonad
    (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
    ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
    ,handleEventHook,clickJustFocuses,rootMask,clientMask)

import XMonad.Layout
import XMonad.Operations
import XMonad.ManageHook
import qualified XMonad.StackSet as W
import Data.Bits ((.|.))
import Data.Default
import Data.Monoid
import qualified Data.Map as M
import System.Exit
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Extras

E Data.Default está definitivamente presente. Então defaultConfig (ainda dentro de Xmonad.Config ) é definido como:

instance (a ~ Choose Tall (Choose (Mirror Tall) Full)) => Default (XConfig a) where
  def = XConfig
    { XMonad.borderWidth        = borderWidth
    ... ... ... ... ... ...
    , XMonad.rootMask           = rootMask
    , XMonad.handleExtraArgs = \ xs theConf -> case xs of
                [] -> return theConf
                _ -> fail ("unrecognized flags:" ++ show xs)
    }

-- | The default set of configuration values itself
{-# DEPRECATED defaultConfig "Use def (from Data.Default, and re-exported by XMonad and XMonad.Config) instead." #-}
defaultConfig :: XConfig (Choose Tall (Choose (Mirror Tall) Full))
defaultConfig = def

Então, defaultConfig deve estar usando Data.Default , e eu sou quem está fazendo algo errado, provavelmente.

Tentativas de solução

Minha configuração mínima ( xmonad.hs ) que está jogando o aviso é:

import XMonad

main = xmonad defaultConfig { terminal = "urxvt" }

(Minha configuração completa do xmonad é enorme, o acima é apenas uma configuração mínima que replica o aviso).

Eu tentei:

import Data.Default
import XMonad

main = xmonad defaultConfig { terminal = "urxvt" }

Mas o aviso permanece. Eu poderia usar main = xmonad XConfig {} e, em seguida, enumerar todas as opções de configuração, mas isso seria copiar 90% de XMonad.Config em meu próprio xmonad.hs .

Pergunta

O que estou fazendo de errado? Como faço para forçar o uso de Data.Default ? Eu entendi o aviso de descontinuidade corretamente em primeiro lugar?

    
por grochmal 11.01.2017 / 23:24

1 resposta

7

Você não precisa importar import Data.Default

isso é importado no próprio XMonad

apenas uma alteração é necessária:

import XMonad
main = xmonad defaultConfig { terminal = "urxvt" }

para

import XMonad
main = xmonad def { terminal = "urxvt" }
    
por 11.01.2017 / 23:37

Tags