Haskell 프로그래밍에 관한 많은 질문이 있기 때문에 이것은 아마도 SO 사이의 경계선일 것입니다. 그러나 궁극적으로 이는 구성 문제입니다.
배경 및 연구
0.12부터 Xmonad는 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."
작동합니다. 단지 경고일 뿐입니다. 그러나 경고의 원인이 무엇인지 알고 싶습니다. (이해하려고 노력했지만 몇 시간 동안 실패했습니다.) 지원 중단 설명에 따르면 XMonad.Config
from의 정의가 사용되지 않는다고 추측할 수 있지만 실제로는 그렇지 않습니다. 코드 보기Default
Data.Default
XMonad.Config
처음에 가져오기가 표시됩니다.
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
그리고 Data.Default
그것은 확실히 존재합니다. 그러면 defaultConfig
(여전히 Xmonad.Config
)은 다음과 같이 정의됩니다.
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
그래서 defaultConfig
그것은 사용해야 하며 Data.Default
아마도 내가 잘못된 일을 하고 있는 사람일 것입니다.
시도해볼 수 있는 솔루션
xmonad.hs
경고를 발행해야 하는 최소 구성()은 다음과 같습니다.
import XMonad
main = xmonad defaultConfig { terminal = "urxvt" }
(나의 전체 xmonad 구성은 상당히 큽니다. 위의 내용은 경고를 복제하기 위한 최소한의 구성일 뿐입니다.)
나는 시도했다:
import Data.Default
import XMonad
main = xmonad defaultConfig { terminal = "urxvt" }
그러나 경고는 남아 있습니다. 각 구성 옵션을 사용하고 열거할 수 있지만 이렇게 하면 내 구성 옵션의 main = xmonad XConfig {}
90%가 복사됩니다 .XMonad.Config
xmonad.hs
질문
내가 뭘 잘못했나요? 강제로 사용하려면 어떻게 해야 하나요 Data.Default
? 처음에 지원 중단 경고를 올바르게 이해했나요?
답변1
가져올 필요가 없습니다.import Data.Default
이것은 XMonad 자체에서 가져옵니다.
변경 사항은 하나만 필요합니다.
import XMonad
main = xmonad defaultConfig { terminal = "urxvt" }
도착하다
import XMonad
main = xmonad def { terminal = "urxvt" }