我目前正在为xmonad编写一个配置,我想做一个可变的颜色主题配置,所以我把每个颜色主题做成一个类型,例如data Dracula = Dracula
,和一个Color类型类
class ColorTheme a where
colorWhite::a->String
colorWhite = const "#ffffff"
-- rest of the colors
现在我想改变颜色主题然后使用一个dmenu脚本,脚本将写入到一个文本文件中选择的颜色主题名称,每个名称是字符串表示的主题类型名称。
使用模板haskell,我能够将字符串读入构造函数名,例如
x一个一个一个一个x一个一个二个一个x一个一个三个一个
问题是堆栈在theme.txt
更改时不会重新编译,我从Language.Haskell.TH.Syntax
模块中读到了addDependentFile
,但我不知道如何使用,也没有找到任何教程,还有,关于相同问题的问题,无论是在使用GHC时,还是在没有书面示例的情况下被提示使用addDependentFile
。
我试着写一些
--xmonad.hs
main :: IO ()
main = (xmonad . withSB mySB . docks . ewmhFullscreen . ewmh $ defaults)
>> (runQ $ addDependentFile "/absolute_path/to/theme.txt")
抛出异常,Q单子不能在IO单子内部调用。
所以,如果有人可以使用addDependentFile
,你会提供一个简单的例子如何使用?
GHC版本:9.2.4堆栈版本:2.9.1
- 夏立耀解决方案的工作版本**
retrieveThemeName :: Q Exp
retrieveThemeName = do
addDependentFile "/absolute_path/to/theme.txt"
runIO $ do
handle <- openFile "theme.txt" ReadMode
name<-hGetLine handle
return $ LitE (StringL name )
theme = $(conE (mkName $(retrieveThemeName) ))
1条答案
按热度按时间mqkwyuun1#
你可以在一个splice(
$( ... )
)中调用addDependentFile
。下面是你如何在需要这个文件的action旁边调用它:我还删除了一些不必要的引用,你可以这样称呼它: