这两种类型都是同构的,但对ZeroF只有ZeroF类型的同义词有一个轻微的限制,我不确定是否有出路。
data NatF x = NatF { unNatF :: (forall u. Either u x) }
pattern ZeroF <- NatF (Left _)
pattern SuccF n = NatF (Right n)
data PeanoF x = ZeroFP | SuccFP x -- isomorphe
我是不是做错了什么事(除了人为的例子.))?
简短问题:同构函数在编程(即函数式编程)中的重要性是什么?
Long Theory:我试图根据我不时听到的一些行话,在函数式编程和类别理论中的概念之间进行一些类比。从本质上讲,我试图将这个术语“解包”成一些具体的东西,然后我可以对其进行扩展。然后,我将能够使用这个行话,并理解我在说什么。这总是很好的。
我经常听到的术语之一是同构,我猜这是关于函数或函数组合之间的等价性的推理。我想知道是否有人可以提供一些关于一些常见模式的见解,在这些模式中,同构的属性会派上用场(在函数式编程中),以及获得的任何副产品,例如从同构函数推理中获得的编译器优化。
下列断言是正确的:
由Haskell类型系统验证的用户可编程访问的唯一真正的同构( Haskell编译器是/可以知道的)是:
- the **set** of values of a Haskell datatype
- the set of values of types those required by its constructors
即使是泛型编程也不能生成“真”同构,其组合在运行时以标识形式产生(例如 -和Ocaml中的 )。
Haskell本身是唯一产生的同构,Coercible,但是这些同构仅限于同构。
所谓“实同构,用户可编程访问,由Has
我正在寻找一个具有以下属性的Haskell类型的A (使用外来的扩展对我来说很好.):对于所有可遍历的t,以下两种类型是同构的:
forall a. C a => t a -> a
和
t A -> A.
在我的具体案例中,C是以下类:
class Floating a => C a where
fromDouble :: Double -> a
换句话说,我想把所有类型的通用量化( a in class C )拉到A类型中,这样函数to -> A就能给出 all a的函数。所以我想我在某种意义上是在寻找C类的“通用”实例.
我为A考虑了各种花
我有下面的设置。我现在正试图嘲弄我的后端。
我有一个异步还原操作,如下所示:
import * as types from './../constants/actionTypes.jsx'
import fetch from 'isomorphic-fetch'
var fetchMock = require('fetch-mock');
export function fetchEntry(entry){
return dispatch => {
d