applicative相关内容
在ghci中: λ> :t (pure 1) (pure 1) :: (Applicative f, Num a) => f a λ> show (pure 1) :1:1: No instance for (Show (f0 a0)) arising from a use of `show' Possible fix: add an
..
AFAIK是GHC8的新增功能之一,是ApplicativeDo语言扩展,如果可能的话,它将对相应的Applicative方法(,)的do表示减掉.我有以下问题. 如何确定对Applicative方法的废除是否可行?据我所知,它会进行依赖性检查(如果后者取决于前者的结果)来确定资格.还有其他条件吗? 尽管此添加使没有任何Monad实例的类(可能是?)的应用代码更易于阅读.但
..
我在Haskell研究函子,应用函子和单子词时,我在 Wikipedia 上找到了这个定义: 在函数式编程中,特别是应用程序Haskell functor 是类似于 monad (return,fmap,join)的结构 没有join,或者像是具有return的 functor . 我无法理解:在我看来,向函子提供return(即pure)不足以获得适用的函子,因为您需要提供ap(即
..
class Applicative f => Monad f where return :: a -> f a (>>=) :: f a -> (a -> f b) -> f b ()可以从pure和(>>=)派生: fs as = fs >>= (\f -> as >>= (\a -> pure (f a))) 行 fs >>
..
从理论上讲,单子元是函子的一个子集,特别是应用函子,即使在Haskell的类型系统中未标明它也是如此. 知道给定单子并以return和bind为基础,怎么做: 派生fmap, 派生吗? 解决方案 好吧,fmap只是(a -> b) -> f a -> f b,也就是说,我们要用纯函数转换单子动作的结果.用do标记很容易写: fmap f m = do a
..
好,所以我知道Applicative类型类包含的内容,以及为什么这样做有用.但是在一个不平凡的例子中,我不太了解您如何使用它. 例如,考虑以下相当简单的Parsec解析器: integer :: Parser Integer integer = do many1 space ds
..
ap没有文档说明,并且带注释的说明可能是,但并非出于实际原因: ap :: (Monad m) => m (a -> b) -> m a -> m b ap m1 m2 = do { x1
..
从 validation 软件包的文档中: AccValidation数据类型与Either同构,但是有一个Applicative实例在错误侧累积.也就是说,如果遇到两个(或多个)错误,则使用Semigroup操作将其附加. 由于此Applicative实例,因此没有相应的Bind或Monad实例. AccValidation的示例为“不是单子的应用函子". 对我来说,这还不是很
..
假设我有一个数字列表和一个函数列表: val xs: List[Int] = List(1, 2, 3) val fs: List[Int => Int] = List(f1, f2, f3) 现在我想使用Applicative将f1应用于1,将f2应用于2,等等. val ys: List[Int] = xs fs // expect List(f1(1), f2(2),
..
我该如何正确证明这一点 sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a) sequenceA [] = pure [] sequenceA (x:xs) = pure (:) x sequenceA xs 与monad输入基本相同 sequenceA' :: Monad m =
..
我正在尝试实现自己的Applicative解析器,这是我使用的代码: {-# LANGUAGE ApplicativeDo, LambdaCase #-} module Parser where -- Implementation of an Applicative Parser import Data.Char import Control.Applicative (some, ma
..
我有一个函数 parseArgs :: [String] - > StdGen - > IO() 它选择要运行的函数。主要看起来像 main = parseArgs getArgs getStdGen>> = id 我有这个问题, parseArgs getStdGen 类型为 IO(IO
..
我想为尖括号中的逗号分隔的一对值编写解析器。我得到了以下方法: pair p1 p2 = do x1 逗号 x2 返回(x1,x2) 数据Foo = Foo(Bar,Bar) foo :: Parser Foo foo = Foo (angle $ pair bar bar) 然而我更喜欢Foo构造函数来取两个参数而不是元组: data
..
我通常会这样做,当我看到一些类型实例时,我不知道得到,是写一些良好类型的表达式,看看它返回什么: 有人可以解释这些实例吗?你通常会听到关于List和Maybe的实例,这些实例现在对我来说很自然,但我不明白函数如何成为Functor甚至是Monad。 编辑: 好的,这是一个不能编译的有效良好类型表达式: fmap(+ )(+)1(+1)1 解决方案 ,我同
..
正如Hackage所述, Applicative Functors a>,它们是强力松散monoidal函子。那么为什么他们在Haskell中的定义没有如下所示: class Functor f => MonoidalApplicative f其中 mult :: f a - > f b - > f(a,b) unit :: a - > f a starAp :: f(a
..
我一直在玩弄 Applicative 实例来弄清楚它们是如何工作的。然而,我真的不明白这种行为。 如果我定义了我自己的数据类型,那么应用 pure 来它没有其他参数,没有任何打印输出,但是如果我尝试将结果应用于某个结果,则会出错。 ghci>数据T = A ghci>纯A ghci>纯A 0 :21:1: 使用'print'产生的(Show T)没有实例 在交互
..
为什么在Control.Applicative中将一个值赋给一个名为 pure 的函数? 解决方案 将纯粹看作是一个形容词。 foo在纯价值 4 上应用纯4 = foo 。至于确切的原因,为什么叫做纯粹,可能只有McBride帕特森会知道的。)
..
为什么 f g x 相当于(f。g) x 虽然 不是正确的联想? 在一个流行的成语中使用普通的 $ 时,有一种等同性是有效的,但是目前 $ 是右联合的!) code>具有与 相同的关联性和优先级,但行为不同! 示例: Prelude Control.Applicative> (show。show)只需3 只需“\
..
[( - 1,-1) ,( - 1,0),( - 1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)] - 否(0,0) 请注意,列表中没有(0,0)。我使用(dx,dy)元组向上,向下,向左,向右和从坐标对角搜索。 每次我写它,我都觉得应该有一个更简洁,和/或更易于阅读的方式来定义它。我对Haskell比较陌生,我想到了Applicati
..
我在我的网络应用程序中使用了一个小型数据库池。这个特殊的函数: pre $ withPool pool =括号(takeConn池)(putConn池) 可以用适用风格重写: withPool =括号 takeConn * putConn 可以说它的可读性更高,更加优雅。所以很自然,我想写这样写。但是数据库连接池应该很快,而且我担心这种风格会带来不必要
..