小编Oli*_*ver的帖子

转储包括来自g ++的路径

我正在尝试编写一个小的构建脚本 - 并且想要确定包含是否包含系统.所以我希望g ++告诉我它正在使用的包含路径.

cpp -v似乎是最好的镜头,但它并没有给我C++路径.

所以我尝试过:

g++ -Xpreprocessor -v  
Run Code Online (Sandbox Code Playgroud)

哪个不能正常工作 - g ++捕获-v为它自己的详细输出.

谢谢,奥利弗

build-automation g++ path include

62
推荐指数
1
解决办法
3万
查看次数

如何在管道中使用管道掉落功能?

我有一个简单的任务 - 从文件中读取一堆行并对其中的每一行执行一些操作.除了第一个 - 这是一些可以忽略的标题.

所以我想我会试试管道.

printFile src = runResourceT $ CB.sourceFile src =$= 
    CT.decode CT.utf8 =$= CT.lines =$= CL.mapM_ putStrLn
Run Code Online (Sandbox Code Playgroud)

凉.

所以现在我只想放弃第一行...而且似乎有一个功能 -

printFile src = runResourceT $ CB.sourceFile src =$= 
    CT.decode CT.utf8 =$= CT.lines =$= drop 1 =$= CL.mapM_ putStrLn
Run Code Online (Sandbox Code Playgroud)

嗯 - 但现在我注意到drop有类型签名Sink a m ().有人向我建议我可以使用Monad实例来管道并使用drop来有效地删除一些元素 - 所以我尝试了这个:

drop' :: Int -> Pipe a a m ()
drop' n = do
  CL.drop n
  x <- await
  case x of 
    Just v -> yield v
    Nothing -> …
Run Code Online (Sandbox Code Playgroud)

haskell pipe conduit

9
推荐指数
1
解决办法
512
查看次数

Haskell中MVC框架的镜头

我一直在考虑如何在WPF或AngularJS的模型中在Haskell中构建MVC框架的想法,但似乎无法找到开始的关键类型或想法.所以不幸的是模糊的问题 - 还有其他人在考虑这个问题吗?

我看到编辑镜头,多盘和复合材料,但我认为它们都解决了稍微不同的问题.

我将如何运作的粗略草图将是:

  1. 将模型创建为普通的haskell数据结构
  2. 创建一组"镜头"或命令来修改模型.
  3. 编写一个HTML(或其他)模板,该模板由模型中的类型进行参数化.

.

data Model = Page { _title :: String, _content :: [(Int, String)] }

title :: Lens Model String
content :: Int -> Lens Model (Maybe String)
Run Code Online (Sandbox Code Playgroud)

然后我希望能够编写一个函数:

Model -> Template Model -> Html
Run Code Online (Sandbox Code Playgroud)

以及在我应用镜头时更新部分视图的功能.

Lens Model a -> a -> HtmlTemplate Model -> [(Path, Html)]
Run Code Online (Sandbox Code Playgroud)

所以我想问题是 - 镜头采用哪种类型可以在一个数据结构上运行,然后用于描述另一个数据结构的变化.

一种可能性似乎是创建一个包装所有镜头的GADT,然后在GADT类型上模板化HTML,然后可以在每一步使用它来匹配模板.例如

data Lenses a b where
    Title :: Lens Model String -> Lenses Model String
    Item  :: Lens Model String -> Lenses Model …
Run Code Online (Sandbox Code Playgroud)

wpf model-view-controller haskell

7
推荐指数
1
解决办法
600
查看次数

基于密钥的记忆

我最近一直在玩MemoCombinators和MemoTrie包,我试图记忆一个正在采用树的函数(由于共享了几个节点,这实际上是伪装的DAG).形式为:

data Tree k a = Branch (Tree k a) (k, a) (Tree k a) | Leaf (k, a)
Run Code Online (Sandbox Code Playgroud)

所以我想记住一个类型的函数(基于它的键):

Tree k a -> b
Run Code Online (Sandbox Code Playgroud)

现在我有一个模糊的理解,即这些记忆组合器用于将你的函数f :: a -> a转换为懒惰(未a评估)值的结构,因此当你拉出一个时,它已经被评估了.所以这对我的树来说不会有问题 - 不知怎的,我需要把它变成一个索引的值结构k.

我无法弄清楚如何使用组合器库.一个简单的方法就是制作一个k -> a索引地图的功能,这个功能很合适,但看起来有点笨重.

我是否误入了这个目标,还是我错过了一些明显的东西?

我可以很容易地看到如何用这种样式编写这个函数,通过所有计算显式线程化我的"表":

f :: Tree Int Int -> Map Int Int -> (Int, Map Int Int)
f (Branch l (k, x) r) m | (Just r) <- lookup k m = r
                        | otherwise = (max rl …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

3
推荐指数
1
解决办法
172
查看次数