从文档:
尝试第一个
Traversal(或Fold),如果没有返回任何条目,则返回第二个Traversal(或Fold).只有
Traversal当第二个Traversal与第一个结果不相交或返回完全相同的结果时,这才有效.
是否有一个简单的示例,failing表明由此产生的无效遍历和一个展示它的测试用例?
我有以下情况:
GHC bug#9010使用GHC 7.6无法安装库B. 处理TH时,GHCi会启动并尝试加载库X,这会失败并显示消息
Loading package charsetdetect-ae-1.0 ... linking ... ghc:
~/.cabal/lib/x86_64-linux-ghc-7.6.3/charsetdetect-ae-1.0/
libHScharsetdetect-ae-1.0.a: unknown symbol `_ZTV15nsCharSetProber'
Run Code Online (Sandbox Code Playgroud)
("未知符号"的实际名称因机器而异).
有没有解决这个问题的方法(当然除了"不要使用模板Haskell")?也许库X必须以不同的方式编译,或者有一些方法可以阻止它加载(因为它不应该在代码生成期间调用)?
我正在尝试使用GTK3和WebKit在Haskell中创建一个简单的应用程序.此代码创建并显示一个包含WebView内部的窗口,每次按下一个键时都会显示一个随机数.
import Control.Monad.Trans (lift)
import Control.Concurrent (forkOS)
import System.Random (randomIO)
import Graphics.UI.Gtk -- gtk3
import Graphics.UI.Gtk.WebKit.WebView -- webkitgtk3
main = forkOS $ do
-- Init GTK.
initGUI
-- Create a window which would finish the GTK loop
-- after being closed.
window <- windowNew
window `after` objectDestroy $
mainQuit
-- Create a WebView inside.
webView <- webViewNew
set window [containerChild := webView]
-- Make the WebView display a random number on key press.
webView `on` keyReleaseEvent $ lift …Run Code Online (Sandbox Code Playgroud) 几个小时前,我建造了GHC HEAD来试验新的闪亮封闭式系列.
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances #-}
type family C a b where
C a [a] = [a]
C a a = [a]
Run Code Online (Sandbox Code Playgroud)
现在我尝试C使用:
class Combine a b where
combine :: a -> b -> C a b
instance Combine a [a] where
combine a b = a : b
instance Combine a a where
combine a b = [a, b]
Run Code Online (Sandbox Code Playgroud)
导致此错误:
Couldn't match expected type ?C a a’ with actual type ?[a]’
...
In the expression: …Run Code Online (Sandbox Code Playgroud) 来玩个游戏.我们将使用两个桩,两个都由黑色/白色侧面芯片组成.
data Pile = Pile { _blacks, _whites :: Int }
makeLenses ''Pile
data Game = Game { _pileA, _pileB :: Pile }
makeLenses ''Game
Run Code Online (Sandbox Code Playgroud)
一个非常聪明的举动是将A堆中的黑色芯片和白色芯片 - 在B堆中翻转.但是如何?
cleverMove :: Game -> Game
cleverMove game = game & pileA . blacks -~ 1
& pileA . whites +~ 1
& pileB . blacks +~ 1
& pileB . whites -~ 1
Run Code Online (Sandbox Code Playgroud)
不是很优雅.如何在不参考每个桩两次的情况下进行此操作?
我想出的唯一的事情(我不喜欢它):
cleverMove game = game & pileA %~ (blacks -~ 1)
. (whites +~ 1)
& pileB …Run Code Online (Sandbox Code Playgroud) 是SF已经定义的任何地方,或者它至少有名字吗?
data SF a f x = SF a (f x)
instance Functor f => Functor (SF a f) where
fmap g (SF a fx) = SF a (fmap g fx)
Run Code Online (Sandbox Code Playgroud) 在我的.nix文件中,我有包foo和bar,bar取决于foo:
let
haskellPackages = reflex-platform.ghcjs.override {
overrides = self: super: {
foo =
pkgs.haskell.lib.dontCheck
(pkgs.haskell.lib.dontHaddock
(self.callCabal2nix "foo" ./foo { }));
bar = self.callCabal2nix "bar" ./bar { };
};
};
in
haskellPackages.bar
Run Code Online (Sandbox Code Playgroud)
如何禁用构建中包含的可执行文件foo?我只想建立图书馆。
我试过overrideCabal,但没有运气。这仍然构建foo可执行文件:
let
haskellPackages = reflex-platform.ghcjs.override {
overrides = self: super: {
foo =
pkgs.haskell.lib.overrideCabal
(pkgs.haskell.lib.dontCheck
(pkgs.haskell.lib.dontHaddock
(self.callCabal2nix "foo" ./foo { })));
(drv: { isExecutable = false; });
bar = self.callCabal2nix "bar" ./bar …Run Code Online (Sandbox Code Playgroud)