我正在尝试编写一个小的构建脚本 - 并且想要确定包含是否包含系统.所以我希望g ++告诉我它正在使用的包含路径.
cpp -v似乎是最好的镜头,但它并没有给我C++路径.
所以我尝试过:
g++ -Xpreprocessor -v
Run Code Online (Sandbox Code Playgroud)
哪个不能正常工作 - g ++捕获-v为它自己的详细输出.
谢谢,奥利弗
我有一个简单的任务 - 从文件中读取一堆行并对其中的每一行执行一些操作.除了第一个 - 这是一些可以忽略的标题.
所以我想我会试试管道.
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) 我一直在考虑如何在WPF或AngularJS的模型中在Haskell中构建MVC框架的想法,但似乎无法找到开始的关键类型或想法.所以不幸的是模糊的问题 - 还有其他人在考虑这个问题吗?
我看到编辑镜头,多盘和复合材料,但我认为它们都解决了稍微不同的问题.
我将如何运作的粗略草图将是:
.
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) 我最近一直在玩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)