考虑一个类型类,其成员类型* -> *.例如:Functor类型类.众所周知,在Haskell中,这种类型类与其数学(即类别理论)类似物之间存在对应关系.归纳:
问题1: Haskell中每个成员都是类型的每个类型类都* -> *对应于类别之间的某些功能吗?
现在考虑一个类型为类型的类型类*.例如,可以想象一个类型类Group对应于组的类别(从技术上讲,Group它将是Hask其对象包含所有Haskell类型的子类别).归纳:
问题2: Haskell中每个成员类型的类型类是否*对应于某个类别(技术上:某些子类别Hask)?
由此,可以问下一个一般性问题:
问题3:类型的类型是否等于或高于* -> * -> *某些类别理论概念?
实际上,整个问题可归纳如下:
一般问题:每个Haskell类型类都对应于某种类别的理论概念吗?
编辑:至少,似乎你可以说,因为每个类型类都包含一些Haskell类型作为其成员,你可以将每个类型类视为一些子类Hask(关闭.和利用id).
据称这newtype T a = T (a -> Int)是一个不是仿函数的类型构造函数(但它是一个逆变函子).怎么会这样?或者什么是逆变函子(我认为这很明显为什么这不能成为一个普通的函子)?
已经可以使用图像在orgmode中预览方程.例如,如果我输入
$y=2^x$
Run Code Online (Sandbox Code Playgroud)
然后我可以在组织文件本身中预览这个等式.我的问题是可以用图像做到这一点吗?到目前为止实施
$\includegraphics{picture.png}$
Run Code Online (Sandbox Code Playgroud)
不起作用(我只是得到一个空白框).
假设一个正在使用stack的构建工具,使一个Haskell库(从Hackage导入包,等等)与其中一个C/C++项目中使用main位于C/C++.
假设您的项目被命名为Lib.hs(使用外部库从hackage),有没有使用堆栈来导出的方式Lib.o,Lib.hi以及Lib_stub.h要通过C/C++编译器像消耗gcc或g++?
编辑:一个相关的问题可能是:"如何使用Stack作为构建工具与Haskell和C/C++项目一起使用,该项目main位于C/C++中?
编辑2:经过反思,解决此问题的一种方法是像往常一样使用Stack,但将C/C++主函数迁移到Haskell.这是最好的方法吗?是否存在巨大的性能成本或我应该注意的任何事情?
来自不适用的仿函数:
一个类型构造函数,它是一个Functor但不是Applicative.一个简单的例子是一对:
Run Code Online (Sandbox Code Playgroud)instance Functor ((,) r) where fmap f (x,y) = (x, f y)但是如何在
Applicative不对其施加额外限制的情况下定义其实例是没有办法的r.特别是,没有办法如何定义pure :: a -> (r, a)任意的r.
问题1:为什么会这样?以下是如何pure使用f类型的函数a -> b:
(pure f) (pure x, pure y) = (pure x, pure f y)
Run Code Online (Sandbox Code Playgroud)
从那里,定义pure :: a -> (r, a)可能取决于什么r.例如,如果r是Integer,则可以定义
pure x = (0 :: Integer, x)
Run Code Online (Sandbox Code Playgroud)
在您的实例声明中.那么问题是什么?
问题2:我们可以说一般来说,如果F是仿函数,那么<*> …
来自不适用的仿函数:
一个类型构造函数,它是一个Functor但不是Applicative.一个简单的例子是一对:
Run Code Online (Sandbox Code Playgroud)instance Functor ((,) r) where fmap f (x,y) = (x, f y)但是如何在
Applicative不对其施加额外限制的情况下定义其实例是没有办法的r.特别是,没有办法如何定义pure :: a -> (r, a)任意的r.
在这里,pure不能同时为所有类型定义; 但是,对于任何具体类型T,人们都可以((,) T)申请.
问题:是否有一个具体仿函数的例子(即,没有涉及类型变量)是一个仿函数而不是一个应用程序?
我最近创建了一个 MixPanel 分析帐户,并为开发/学习目的添加了一堆不需要的事件。
有没有办法删除与 MixPanel 项目关联的所有事件,或删除与用户配置文件关联的所有事件?
根据Om Next的文档:
查询 - > AST
Run Code Online (Sandbox Code Playgroud)(om.next/query->ast '[(:foo {:bar 1})])给定查询表达式返回AST.
ast->查询
Run Code Online (Sandbox Code Playgroud)(om.next/ast->query ast)给定查询表达式AST,将其解析为查询表达式.
问题:为什么需要这些功能?也就是说,为什么需要直接操作查询抽象语法树(我假设是表示查询树的clojure映射,以及一些元数据)?
假设我的工作目录working_directory有一个.git隐藏的子目录(用其创建git init),没有别的.
我们的"git存储库"所指的是什么?它是隐藏.git文件夹,还是working_directory仅包含.git子文件夹的整个内容?
考虑以下pg的代码段。17 的C ++之旅:
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { } //construct a Vector
double& operator[](int i) { return elem[i]; } //element access: subscripting
int size() { return sz; }
private:
double* elem; // pointer to the elements
int sz; // the number of elements
};
Run Code Online (Sandbox Code Playgroud)
在这里,我关注第三行的成员初始化器列表,其中Stroustrup将冒号与两个初始化器语句elem{new double[s]}和分隔开sz{s}。
问题:为什么他在这里使用方括号(即{..})来编写这两个初始化程序语句?我在网络上的其他地方看到过人们用括号括起初始化列表,这样(AFAIK)也可以合法地阅读elem(new double[s])和sz(s)。那么这两种表示法在语义上有区别吗?还有其他方法可以初始化这些变量(在初始化列表的上下文中)吗?