标签: arrows

为HXT计算和过滤箭头

我正在尝试解析XML,但我想过滤和提取给定节点中确定数量的子节点.例如:

<root>
    <node id="a" />
    <node id="b" />
    <node id="c" />
    <node id="d" />
</root>
Run Code Online (Sandbox Code Playgroud)

然后,如果我执行箭头getChildren >>> myFilter 2,我将只返回ID为"a"和"b"的节点.

直觉让我应该用状态箭来跟踪,但我不知道该怎么做.

我试着自己做,但这不是我想要的,看起来不是很优雅,也不行.我尝试运行我的箭头链runSLA和一个整数参数作为初始状态,然后定义:

takeOnly :: IOSLA Int XmlTree XmlTree
takeOnly = changeState (\s b -> s-1)
             >>> accessState (\s b -> if s >= 0 then b else Nothing)
Run Code Online (Sandbox Code Playgroud)

但当然我无法返回Nothing,我需要返回一个XmlTree.但我根本不想回报任何东西!

可能有更好的方法.你能帮助我吗?

感谢您的时间和帮助!

state haskell arrows hxt

6
推荐指数
1
解决办法
432
查看次数

关于Arrow运算符的快速问题

说我有f :: u -> v -> wg :: x -> y -> z.我想要的是h :: (u,x) -> (v,y) -> (w,z).

所以我可以手动解决这个问题:

h (u,x) (v,y) = (f u v, g x y)
Run Code Online (Sandbox Code Playgroud)

但那里的乐趣在哪里?

使用(***)我可以在那里中途:

(f *** g) :: (u,x) -> (v -> w, y -> z)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何获得最后一英里.

haskell arrows

6
推荐指数
1
解决办法
353
查看次数

在实践中使用monad,monoids,functor和箭头

我最近在这篇文章中遇到了关于函数式编程不同方面的有用资源,比如monad和monoids等.

但问题是 - 普通程序员可以用这些概念做些什么.我经常对这些问题进行"学术"研究.但是,我从未在实践中(在实际项目中)遇到任何人使用它们.

所以问题是 - 在Haskell中是否有任何广泛使用的开源项目真正利用这些东西,这些项目在"生产"软件中证明了这一概念的实际必要性,而不是在"学术"软件中写的"纯娱乐".制作这样的列表会很酷:

  • Monads - 在A和B等项目中使用,因为否则这样的代码看起来会复杂得多.
  • 幺半群也一样.
  • 仿函数也一样.
  • 箭头也一样.

monads haskell arrows functor monoids

6
推荐指数
3
解决办法
1828
查看次数

我可以在没有箭头的情况下映射一对的第一个元素吗?

我正在关注算子,应用函子...我不知道如何到达我想要的地方,但我觉得遵循这些类型应该让我更接近.

是否有一种简单的方法可以制作map仅适用于2元组的第一个元素的-alike?以firstControl.Arrow和使用Arrow (->),该做的伎俩很好:

map . first :: (b -> c) -> [(b, d)] -> [(c, d)]
Run Code Online (Sandbox Code Playgroud)

我唯一担心的是我还没有获得真正的箭头直觉,所以如果我坚持下去的话,我迟早会发现自己处于深水中.此外,这似乎是一个相当方便的案例,不能一概而论.

我可以通过使用仿函数,monad或其他任何东西来获得相同的功能,同时了解我想要的内容吗?我一直在玩弄

\f -> map (f `on` fst)
Run Code Online (Sandbox Code Playgroud)

类似的想法,但不能完全到达那里.

haskell arrows

6
推荐指数
2
解决办法
1401
查看次数

链接类型`ab [c]`和`acd`的箭头

我有一个箭头输出值列表(a b [c])和另一个箭头接受该类型的单个值(a c d).我需要的基本上是一种链接它们或提升第二个箭头的方法a [c] [d].

haskell arrows

6
推荐指数
1
解决办法
189
查看次数

Pikachoose/Fancybox集成 - 灯箱上的导航箭头

我正在使用Fancybox与Pikachoose的集成,如下所述:http://www.pikachoose.com/how-to-fancybox/

我正试图让灯箱显示下一个和之前的箭头,但不是在pikachoose舞台上,我遇到了一些麻烦.我试图showNavArrows: true在脚本的fancybox部分添加选项,但它不起作用.那么我尝试使用pikachoose上的导航选项来显示使用this: {text: {previous: "Previous", next: "Next" }} 但是我一直收到错误,可能我的语法不在正确的位置?有人可以帮忙吗?

这是我正在使用的代码:

$(document).ready(function () {
    var a = function (self) {
        self.anchor.fancybox({
            transitionIn: elastic,
            transitionOut: elastic,
            speedIn: 600,
            speedOut: 200,
            overlayShow: false
        });
    };
    $("#pikame").PikaChoose({
        showCaption: false,
        buildFinished: a,
        autoPlay: false,
        transition: [0],
        speed: 500,
        showCaption: false
    });
});
Run Code Online (Sandbox Code Playgroud)

navigation integration jquery arrows fancybox

6
推荐指数
1
解决办法
3108
查看次数

从箭头表示法转换

我仍然试图弄清楚箭头表示法和Haskell中定义的箭头类型类的语义之间的相似之处.特别是,这个问题似乎有一个用箭头符号写的小计数器的非常规范的例子:

counter :: ArrowCircuit a => a Bool Int
counter = proc reset -> do
        rec     output <- returnA -< if reset then 0 else next
                next <- delay 0 -< output+1
        returnA -< output
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何在没有箭头符号的情况下将其转换回Haskell2010吗?

haskell arrows frp netwire

6
推荐指数
1
解决办法
333
查看次数

Haskell的记录语法是否有任何有用的抽象?

为了尝试简化这个问题,我已经定义了这些箭头函数:

splitA :: (Arrow arr) => arr a b -> arr a (b,a)
splitA ar = ar &&& (arr (\a -> id a))

recordArrow
   :: (Arrow arr)
   => (d -> r)
   -> (d -> r -> d)
   -> (r -> r)
   -> arr d d
recordArrow g s f = splitA (arr g >>^ f) >>^ \(r,d) -> s d r
Run Code Online (Sandbox Code Playgroud)

然后让我做这样的事情:

unarrow :: ((->) b c) -> (b -> c) -- unneeded as pointed out to me in the …
Run Code Online (Sandbox Code Playgroud)

haskell arrows record

6
推荐指数
1
解决办法
166
查看次数

haskell中的箭头和功能有何不同?

我花了一段时间学习和搜索了Arrows,但对Arrow类的必要性感到有些困惑。据我所知,Arrow类是函数的抽象,而Arrow A a b c表示某种东西需要b类型的输入和c类型的输出。此外,它提供了像一些基本的操作>>>arrfirst

但是,我找不到type的标准函数和type的b -> cArrow 之间的任何区别A a b c。在我看来,first>>>可以通过更换\(b, c) -> (f b, c),和(.)。另外,由于箭头内的每个计算都由函数表示,因此如果我们用这些函数替换箭头,我认为不会有任何区别。

简而言之,我认为Arrows计算图的每个节点(类似于 https://www.haskell.org/arrows/syntax.html)都可以由Haskell的标准函数代替。如果属实,为什么我们使用Arrow代替函数?

haskell arrows

6
推荐指数
2
解决办法
638
查看次数

有没有直接的方法将多个记录字段的setter组合到一个setter?

import Control.Lens
import Control.Lens.TH

data Foo = Foo {
    _bar, _baz :: Int
   }
makeLenses ''Foo
Run Code Online (Sandbox Code Playgroud)

现在,如果我想修改两个int字段,我可以做

barbaz :: Setter' Foo Int
barbaz = sets $ \foo f -> foo & bar %~ f
                              & baz %~ f
Run Code Online (Sandbox Code Playgroud)

但这似乎是一种非常难看的手动方式.

使用镜头/箭头组合器可以直接实现吗?

haskell arrows lenses haskell-lens

6
推荐指数
1
解决办法
277
查看次数