标签: functor

什么monad可以表示为free over some functor?

对文件Free说:

许多常见的单子出现为免费单子,

  • 鉴于data Empty a,Free EmptyIdentitymonad 同构.
  • Free Maybe可用于建模偏好monad,其中每个图层表示运行计算的时间更长.

还有哪些monad可以使用Free

我只想到一个:我相信Free (Const e)是同构的Either e.

编辑:哪些monad 不能用于表达Free?为什么?

monads haskell functor free-monad

26
推荐指数
3
解决办法
1615
查看次数

组成两个函数是什么意思?

Haskell Typeclassopedia 3.2节的练习5要求在声明中提供证据或反例

两个Functors的组合也是一个Functor.

我一开始以为这是在讨论组合fmap由两个单独的a实例定义的方法Functor,但这并没有多大意义,因为就我所知,类型不会匹配.对于两种类型,f并且f',类型fmap将是fmap :: (a -> b) -> f a -> f bfmap :: (a -> b) -> f' a -> f' b,并且实际上看起来并不可组合.那么组成两个是什么意思Functors呢?

theory haskell functor

26
推荐指数
4
解决办法
3648
查看次数

Applicative/Monad实例在多大程度上是唯一确定的?

如上所述这个问题/答案,Functor实例唯一确定的,如果他们存在.

对于列表,有两个众所周知的Applicative实例:[]ZipList.因此,应用型不是唯一的(见GHC可以导出函子与应用型实例的单子变压器?而且为什么没有-XDeriveApplicative推广?).但是,ZipList需要无限列表,因为它pure无限期地重复给定元素.

  • 是否有其他可能更好的数据结构示例至少有两个Applicative实例?
  • 有没有这样的例子只涉及有限的数据结构?也就是说,就像假设Haskell的类型系统区分归纳和共同数据类型一样,是否有可能唯一地确定Applicative?

去进一步,如果我们能够扩大双方[]ZipList一个单子,我们会在那里有一个单子不是唯一的数据类型和其确定的函数对象的例子.唉,只有当我们将自己限制在无限列表()时才有ZipList Monad实例.并且为了创建单元素列表,所以它需要有限列表.因此:return[]

  • Monad实例是否由数据类型唯一确定?或者是否有一个数据类型的示例可以有两个不同的Monad实例?

如果有一个包含两个或更多不同实例的示例,则会出现一个明显的问题,如果它们必须/可以具有相同的Applicative实例:

  • Monad实例是否由Applicative实例唯一确定,或者是否有一个Applicative的示例可以有两个不同的Monad实例?
  • 是否存在具有两个不同Monad实例的数据类型的示例,每个实例具有不同的Applicative超实例?

最后我们可以为Alternative/MonadPlus提出同样的问题.由于存在两组不同的MonadPlus法则,这很复杂.假设我们接受一套法律(对于Applicative我们接受右/左分配/吸收,也参见这个问题),

  • 是由Applicative唯一确定的替代品,Monad的MonadPlus,还是有反例?

如果以上任何一个都是独一无二的,我会有兴趣知道为什么,要有一丝证明.如果没有,反例.

monads haskell functor category-theory applicative

26
推荐指数
2
解决办法
1197
查看次数

如何重载"函数调用"操作符有用吗?

我最近发现在C++中你可以以一种奇怪的方式重载"函数调用"操作符,你需要编写两对括号来执行此操作:

class A { 
  int n;
public: 
  void operator ()() const; 
};
Run Code Online (Sandbox Code Playgroud)

然后以这种方式使用它:

A a;
a();
Run Code Online (Sandbox Code Playgroud)

什么时候有用?

c++ operator-overloading functor function-object

25
推荐指数
3
解决办法
2万
查看次数

帮助理解Java中的函数对象或函子

有人可以解释一个仿函数是什么,并提供一个简单的例子吗?

java functor

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

为什么有几个标准运算符没有标准仿函数?

我们有:

  • std::plus (+)
  • std::minus(-)
  • std::multiplies(*)
  • std::divides(/)
  • std::modulus(%)
  • std::negate(-)
  • std::logical_or(||)
  • std::logical_not(!)
  • std::logical_and(&&)
  • std::equal_to(==)
  • std::not_equal_to(!=)
  • std::less(<)
  • std::greater(>)
  • std::less_equal(<=)
  • std::greater_equal(>=)

我们没有仿函数:

  • & (地址)的
  • * (解引用)
  • []
  • ,
  • 位运算符~,&,|,^,<<,>> …

c++ stl functor

23
推荐指数
3
解决办法
1043
查看次数

混淆功能作为haskell中Functor的实例

Functor中的fmap类型是:

fmap :: Functor f => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

看起来,首先将函数(a - > b)应用于fa的参数以创建类型b的结果,然后对其应用f,结果为fb

使用Maybe a例如:

 fmap show (Just 1)
 result is : Just "1"
Run Code Online (Sandbox Code Playgroud)

同说:

Just (show 1)
Run Code Online (Sandbox Code Playgroud)

但是当( - >)用作Functor时(在Control.Monad.Instances中)

import Control.Monad.Instances
(fmap show Just) 1
result is : "Just 1"
Run Code Online (Sandbox Code Playgroud)

也就是说,Just首先应用,然后显示应用.在另一个例子中,结果是相同的:

 fmap (*3) (+100) 1
 result is 303
Run Code Online (Sandbox Code Playgroud)

为什么不*3先,然后+100?

haskell functor

23
推荐指数
4
解决办法
5873
查看次数

是否有一个不能守法的Functor申请?

一个最近的问题通常问Haskell的各种类之间的边界.我提出了Handler一个有效的例子,Functor没有合理Apply**实例,其中

class Functor f => Apply f where
  (<.>) :: f (a -> b) -> f a -> f b
  -- optional bits omitted.
Run Code Online (Sandbox Code Playgroud)

但是,我还没有找到一个Functor无法成为有效(如果无意义)实例的有效示例Apply.这一事实Apply 已经过(见更新),但单行法,

(.) <$> u <.> v <.> w = u <.> (v <.> w)
Run Code Online (Sandbox Code Playgroud)

似乎使这个相当棘手.

pigworker(康纳·麦克布莱德)前面举了一个例子Functor,是不是Applicative,但他依靠pure这样做,这不是可用Apply.

**后来我意识到实际上可能有一个明智的(虽然有点奇怪)Apply实例Handler,从概念上收集同时异常.


更新

Edward Kmett现在接受 …

haskell functor

23
推荐指数
2
解决办法
668
查看次数

为什么STL仿函数本身是模板化的,而不是它们的函数调用运算符?

STL仿函数的实现方式如下:

template<class T>
struct less{
  bool operator()(T const& lhs, T const& rhs){
    return lhs < rhs;
  }
};
Run Code Online (Sandbox Code Playgroud)

这使我们每次创建这样的仿函数时都会提到(可能很长)类型.为什么它们没有如下所示实现?有什么原因?

struct less{
  template<class T>
  bool operator()(T const& lhs, T const& rhs){
    return lhs < rhs;
  }
};
Run Code Online (Sandbox Code Playgroud)

这将使它们可用而不提及(可能很长)类型.

c++ templates stl functor

22
推荐指数
2
解决办法
700
查看次数

亵渎者和箭头之间的关系是什么?

显然,每个人Arrow都是一个Strong教练.确实^>>>>^对应lmaprmap.而first'second'只是同firstsecond.同样,每个人ArrowChoice也都是Choice.

与箭相比,影响者缺乏的是构成它们的能力.如果我们添加构图,我们会得到一个箭头吗?换句话说,如果(强)profunctor也是一个类别,它是否已经是一个箭头?如果没有,有什么遗漏?

haskell arrows functor category-theory profunctor

22
推荐指数
2
解决办法
2446
查看次数