首先,我要完成的任务的简化版本:我有几个大文件(相当于30GB),我想修剪重复的条目.为此,我建立了一个数据散列数据库,逐个打开文件,散列每个项目,并将其记录在数据库和输出文件中,如果它的散列不在数据库中.
我知道如何使用迭代器,枚举器,我想尝试管道.我也知道如何用管道来做,但现在我想使用管道和持久性.我遇到了类型问题,可能还有整个概念ResourceT
.
这里有一些伪代码来说明问题:
withSqlConn "foo.db" $ runSqlConn $ runResourceT $
sourceFile "in" $= parseBytes $= dbAction $= serialize $$ sinkFile "out"
Run Code Online (Sandbox Code Playgroud)
问题在于dbAction
功能.我想自然地在这里访问数据库.由于它所做的动作基本上只是一个过滤器,我首先想到这样写:
dbAction = CL.mapMaybeM p
where p :: (MonadIO m, MonadBaseControl IO (SqlPersist m)) => DataType -> m (Maybe DataType)
p = lift $ putStrLn "foo" -- fine
insert $ undefined -- type error!
return undefined
Run Code Online (Sandbox Code Playgroud)
我得到的具体错误是:
Could not deduce (m ~ b0 m0)
from the context (MonadIO m, MonadBaseControl IO (SqlPersist m))
bound by …
Run Code Online (Sandbox Code Playgroud) 我现在的空闲时间项目,为了深入WPF MVVM,是我童年时常玩的旧拼图的"数字"副本.它基本上是一个简单的拼图,其中一个必须用不同类型的碎片填充给定的空间,以便整个空间被填充.但随着六角形空间的额外扭曲.
只是为了说明,这就是WPF目前的样子:
http://img190.imageshack.us/img190/2553/atomgridmolecule.png
因此,基本上有许多预定义的部分(如上面的橙色部分)可以"插入"给定的网格(上面的灰色部分).
所以结果看起来像这样:
http://img30.imageshack.us/img30/2553/atomgridmolecule.png
我希望用户(可能只有我^^)能够将碎片拖放到网格中.我希望拖动看起来自然意味着在拖动时具有正确的偏移量取决于用户单击该块的位置.
网格和分子都是相同的控件,来自WPF Panel类的自定义六边形面板控件.
问题在于如何进行"插入",特别是"拔出".
我有两个关于如何解决这个问题的想法:
那我应该采取哪种方法?更重要的是我如何在WPF中实现这一点?特别是使用干净的MVVM方式.
非常感谢你的帮助!任何输入都非常感谢!
编辑:
谢谢阿兰,我也这么认为.
但是我现在该如何实现呢?
在6.12.2中,我觉得这对我有用.但是现在我正在使用6.12.3(通用unix二进制文件)的新盒子,显然有一些设置我不知道了.
我在单个会话中的ghci中有一个控制台历史记录(即ghci的执行),但是这个历史记录不像过去那样在会话之间保存和重新加载.如果ghci正在使用readline,editline或haskeline,我无法跟踪,所以我不太清楚从哪里开始修复它.
我研究了一些Haskell编程语言,现在我发现可以从C程序中调用Haskell函数.在我的Haskell研究期间,我用Haskell创建了一个单词频率计数器,我想尝试从C程序调用该函数,但我不知道该怎么做.我在haskell.org上找到了这两个网站:
尽管如此,我还是有点迷失哪种类型.我的haskell程序是以下功能的管道:
putStr.unlines.map testF.sortedTree
我自己的功能
我很确定我需要将每个函数的类型转换为C类型,而不是只转换调用管道的函数."主要"功能的类型是
fileFreq :: [Char] - > IO()
除此之外,我使用的是Haskell二叉树,它不是前奏类型.
这是整个Haskell代码:
module WordCounter where
import List
import Char
import Foreign.C.Types
data BTree a = Tip | BNode a (BTree a) (BTree a) deriving Show
insertFreq x Tip = BNode (x,1) Tip Tip
insertFreq x (BNode (q,p) l r) | (map toLower x)==(map toLower …
Run Code Online (Sandbox Code Playgroud) 我想要一个简单的CI用于小型开发设置.两个动机 - 完整的构建需要一些时间,预期的测试套件也需要一些时间.我真的不想一头扎进需要一个java应用程序容器的大玩家之一,或者用什么来显示多种颜色的花式图等等.我会特别感兴趣的是"文化上的"Haskellish - 最好是命令行交互或配置文件,与Darcs互操作是绝对必须的.
是否存在任何此类工具,或者我是一个大玩家还是自己编写?
说到这一点,我记得有一个为GHC设立的建设农场.看一下,我注意到它曾经使用过buildbot,现在使用自定义构建器.虽然这些是针对不同的工作流程设置的,但它们中的任何一个都是更简单,更直接的解决方案吗?
编辑:我现在要使用buildbot.将更新它的工作原理.
编辑2:Ben Lippmeier已将buildbox置于hackage上,这似乎也是本机Haskell CI解决方案的基础.它目前未被记录,可能不是完全满足我的需求,但它是:http://hackage.haskell.org/package/buildbox.他用它来编写一个用于修复的buildbot:http://code.haskell.org/repa/repa-head/repa-bot/ .
尝试使用Nuget 1.3将SNAP 1.4安装到新的VS2010项目时出现以下错误:
"外部程序包不能依赖于目标项目的程序包"
这是SNAP Nuget程序包的问题,还是我做错了什么?
PM> Install-Package SNAP'Cast.Core(≥2.5.2)'未安装.试图从源检索依赖...完成.
Install-Package:外部包不能依赖于目标项目的包.
在行:1 char:16
+ Install-Package <<<< SNAP
+ CategoryInfo:NotSpecified:(:) [Install-Package],InvalidOperationException
+ FullyQualifiedErrorId:
NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
当我阅读关于调度程序的GHC Wiki评论时,我对此部分感到困惑:
将Capability标记为免费的一个原因是支持快速标注.在进行安全的外部调用时,我们必须释放Capability,然后将其移交给另一个工作线程.如果外国呼叫很短,我们不希望在返回时产生上下文切换的成本,但由于我们将能力标记为空闲,因此返回的任务很可能立即重新获取并继续.我们醒来的工作人员会发现Capability已经拥有,然后再次进入休眠状态 (如果没有可用于运行该工作线程的空闲CPU,则可能会产生双上下文切换).
我的问题:
对于大胆的句子,确实会导致"双上下文切换",无论是否标记自由的能力.此外,如果它们发生的话,两个"开关"是什么 - 从who1到who2,然后who2到who3?
我将使用netwire和OpenGL在Haskell中编写实时游戏.基本的想法是每个对象将由一个导线表示,它将获得一些数据作为输入并输出其状态,然后我将它全部挂钩到一个大的线路,将GUI的状态作为输入并输出世界状态,然后我可以将其传递给渲染器以及碰撞检测等一些"全局"逻辑.
我不确定的一件事是:我如何键入电线?并非所有实体都有相同的输入; 玩家是唯一可以访问键输入状态的实体,寻找需要目标位置的导弹等.
我该怎么办?
在Scrap中你的样板重新加载,作者描述了一个新的Scrap Your Boilerplate演示文稿,它应该与原版相同.
然而,一个不同之处在于它们假设一组有限的,基本的"基础"类型,用GADT编码
data Type :: * -> * where
Int :: Type Int
List :: Type a -> Type [a]
...
Run Code Online (Sandbox Code Playgroud)
在原始SYB中,使用类型安全转换,使用Typeable
类实现.
我的问题是:
我不能让haskell的堆栈在我的Mac上工作.
我安装了haskell:
brew cask install haskell-platform
这里指定的是:https://www.haskell.org/platform/mac.html#osx-homebrewcask
我也尝试通过可下载的软件包安装在同一个站点上.
我执行以下命令:
stack new my-project
cd my-project
stack setup
stack build
stack exec my-project-exe
根据此处的文档:https: //docs.haskellstack.org/en/stable/README/#quick-start-guide
我立即看到了这个:
[1] 43017 killed stack exec my-project-exe
我还尝试了许多安装haskell的方法.我实际上已经能够得到的东西编译和只使用执行的cabal
,但我不能再拿到hlint
,hindent
或ghc-mod
工作,他们都返回了类似的消息,上面的一个.我希望能够在我的Mac上使用IntelliJ中的HaskForce,但我从来没有运气让haskell工作.
这里有一个gif的例子:https://imgur.com/gallery/afYym7m
我吹走了与ghc,stack和cabal相关的所有东西,然后以这种方式安装 https://haskell-lang.org/get-started
编写小的HelloWorld.hs脚本工作正常并显示 Hello, World
但是,干嘛
stack new someproj
cd someproj
stack build
结果如下:
? someproj stack build
[1 of 2] Compiling Main ( /Users/trevord2/.stack/setup-exe-src/setup-mPHDZzAJ.hs, /Users/trevord2/.stack/setup-exe-src/setup-mPHDZzAJ.o …
Run Code Online (Sandbox Code Playgroud)