根据本指南,我试图让TravisCI自动部署我的Hakyll静态站点.
这是我的回购设置的方式.我有我的源代码分支,其中包含我的hakyll和markdown文件.它将html构建到_site目录中,该目录设置为子模块,链接到我的master分支.
我没有问题地构建网站,然后cd进入_site目录.但是,当我尝试git add ./*新生成的HTML文件时,我收到以下错误:
fatal: Pathspec './about.html' is in submodule '_site'
Run Code Online (Sandbox Code Playgroud)
当我尝试时git add --all,我收到此错误:
git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.
/home/travis/build.sh: line 245: 1566 Aborted git add --all
Run Code Online (Sandbox Code Playgroud)
造成这种情况的原因是什么,我该如何避免这种情况?
您可以在此处查看存储库.
所以,我已经完成了一些bash脚本,但在Windows上只有很少的批处理脚本.我正在尝试激活python virtualenv,运行python脚本,然后在脚本退出时停用virtualenv.
我有一个名为env的文件夹,这是我的virtualenv,还有一个名为work的文件夹,其中包含我的脚本
这是我到目前为止所得到的:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
Run Code Online (Sandbox Code Playgroud)
但是,当我运行脚本时,它会激活virtualenv然后停止.它没有到达第二行并运行Python脚本.有没有办法"激活"激活脚本文件夹,以便可以运行其余的批处理脚本,就好像我从命令行调用了activate.bat一样?
我一直在使用用Haskell编写的Elm编译器.
我想开始为它实现一些优化,其中一部分涉及遍历AST并向某些节点添加"注释",例如尾调用等.
我知道我可以使用SYB或uniplate进行遍历,但我想知道是否有一种无样板的方法来处理类型.
所以,假设我们的AST有一堆代数类型:
data Expr = PlusExpr Expr Expr ...
data Def = TypeAlias String [String] Type ...
Run Code Online (Sandbox Code Playgroud)
如果我正在编写样板文件,我会创建这样的新类型:
data AnnotatedExpr = PlusExpr Expr Expr [Annotation] ...
data AnnotatedDef = TypeAlias String [String] Type [Annotation] ...
Run Code Online (Sandbox Code Playgroud)
这是很多写的boilderplate,并且似乎是避免这种做法的好习惯.
我可以这样写:
Data AnnotationTree = Leaf [Annotation]
| Internal [AnnotationTree] [Annotation]
Run Code Online (Sandbox Code Playgroud)
然后我就会有一个与AST并行运行的注释树.但是不能保证这些树具有相同的结构,因此我们失去了类型安全性.
所以我想知道,是否有一个优雅/推荐的解决方案,以避免样板,但仍然以类型安全的方式注释树?要用等效的节点替换每个节点,还有稍后将在编译中使用的注释列表?
haskell generic-programming ghc scrap-your-boilerplate template-haskell
所以,在Haskell中,执行此操作非常简单:
data Foo = Bar | Baz
deriving (Read, Show)
Run Code Online (Sandbox Code Playgroud)
这很棒,但我希望能够将一些数据作为字符串从Haskell传递给Elm语言.语言足够相似,如果我有一个Haskell实现的Read,我可以轻松地将它转换为Elm.
问题是,当我使用派生时,该函数会自动生成,但我实际上无法看到它的作用.
我想知道,有没有办法自动生成解析和显示使用Read和Show的代码,这样我才能真正看到代码本身?
我正在实现一个任务栏替换,类似于Dock的应用程序切换器样式程序.它正在使用OpenGL做一些独特的东西,并使用键盘快捷键,所以它的设置方式,窗口并不总是有焦点.我想实现它,以便我可以将任意窗口带到前台,就像任务栏或ALT-TAB程序一样.
但是,我的代码只会导致应用程序图标在任务栏中闪烁.Windows API文档说这是应该发生的事情,但我正在寻找一种方法来解决这个问题.
我已经从以下示例中调整了我的代码,这些示例表示附加到前台线程应该允许您设置前景窗口.以下是网站:
http://www.voidnish.com/Articles/ShowArticle.aspx?code=dlgboxtricks
http://invers2008.blogspot.com/2008/10/mfc-how-to-steal-focus-on-2kxp.html
我的代码看起来像这样.请注意,它使用win32的win32包装器(self.hwnd是我想要带到前面的窗口的句柄):
fgwin = win32gui.GetForegroundWindow()
fg = win32process.GetWindowThreadProcessId(fgwin)[0]
current = win32api.GetCurrentThreadId()
if current != fg:
win32process.AttachThreadInput(fg, current, True)
win32gui.SetForegroundWindow(self.hwnd)
win32process.AttachThreadInput(fg, win32api.GetCurrentThreadId(), False)
Run Code Online (Sandbox Code Playgroud)
但是,除非我的窗口是前景窗口(通常不是这样),否则这只会导致程序的图标闪烁.
我做错了吗?还有另一种解决方法吗?我认为必须有,因为有很多应用程序切换器似乎能够做到这一点很好.
我在python中写这个,但如果有另一种语言的解决方案,我将使用包装器或做任何必要的事情来启动和运行.
提前致谢!
编辑: 我将开放一种方法,使其仅在我的特定计算机上工作,即在我的机器上启用任何应用程序关注焦点的方法.
已解决:您需要做的是禁用前景锁定.事实证明它就像这样容易:
win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, win32con.SPIF_SENDWININICHANGE | win32con.SPIF_UPDATEINIFILE)
Run Code Online (Sandbox Code Playgroud) 所以,我有一个Python程序,有一些荒谬的插件/包.我希望能够在其virtualenv中分发程序,以便捆绑包.但是,该程序适用于Windows,并且在Windows上不支持virtualenvs的"可重定位"功能(以及仍在进行实验).
所以,我正在寻找编写脚本,或者只是编写指令来手动更改绝对路径名以重新定位virtualenv.
我的问题是,如果有人知道我必须在virtualenv中寻找绝对路径名称.我是Python包装的新手.activate.bat脚本包含绝对路径名,但是单个包是否将绝对路径名硬编码到其安装中?
Make Environments Relocatable一节描述了为什么不能简单地移动virtualenv,而是列出包含绝对路径名的地方.
我正在尝试安装两个库,Elm并yesod-platform在Ubuntu上使用cabal沙箱.问题是,我正在使用xmonad作为我的窗口管理器.因此,我的包管理器已经安装了一堆Haskell库.在尝试解决依赖关系时,它使用apt安装的库的版本,因此给出了"超出最大跳回"错误.
我如何指示Cabal忽略不在Cabal沙箱中的任何软件包,以便它将在沙箱中安装这些软件包的新鲜versinos并能够解决依赖性?
我目前正在处理一些我没写过的Haskell代码,但是我已经对它进行了修改.我的更改后,我运行该程序并收到以下错误消息:
Prelude.!!: index too large
Run Code Online (Sandbox Code Playgroud)
调用!!不在我的代码中,因此重构它比我想要的工作更多,如果我可以避免它.
我想要的是做这样的事情:
class PrintList a where
(!!) :: [a] -> Int -> a
instance (Show a) => PrintList a where
l (!!) n = if n < (length l)
then (l Prelude.!! n)
else error ("Index " ++ show n ++ " out of bounds in " ++ show l )
instance PrintList a where
(!!) = Prelude.!!
Run Code Online (Sandbox Code Playgroud)
即为!!每个可能的列表类型定义函数,但只要为元素类型定义了Show实例,它的行为就不同了.
或者,一种tryShow :: a -> Maybe String方法也可以做到这一点.
有没有办法做到这一点?只有在Show实现不适用时,才能强制OverlappingInstances使用默认实现吗?这是保证的行为吗?
编辑:任何可以获得错误的人也可以打印类似堆栈跟踪的消息!
haskell generic-programming typeclass ghc overlapping-instances
与Agda不同,Coq倾向于将证明与功能分开.Coq提供的策略非常适合编写校样,但我想知道是否有办法复制一些Agda模式功能.
具体来说,我想:
?或Haskell的_,我可以在编写时省略函数的一部分,并且(希望)让Coq告诉我需要放在那里的类型?用一个函数填充一个块,它将?为所需的参数创建新块match在函数中执行时,让Coq自动写入扩展可能的分支(如Agda模式中的Cc Ca)这是可能的,在CoqIde或Proof General中?