lef*_*out 11 haskell category-theory comonad bifunctor
虽然沉思什么更有用的标准类建议这一个
class Coordinate c where
createCoordinate :: x -> y -> c x y
getFirst :: c x y -> x
getSecond :: c x y -> y
addCoordinates :: (Num x, Num y) => c x y -> c x y -> c x y
Run Code Online (Sandbox Code Playgroud)
它发生我,而不是其他VectorSpace-y或者R2,一个较为普遍的野兽可能潜伏在这里:一Type -> Type -> Type,其两个包含类型都可以提取.嗯,也许他们可以extract编辑?
事实证明,comonad也没有bifunctors包含一些叫做的东西Bicomonad.问题是,从理论上讲,这类课程是否有意义?不像Bimonad(也没有定义,我真的不知道怎么看),一个天真的定义似乎是合理的:
class Bifunctor c => Bicomonad c where
fst :: c x y -> x
snd :: c x y -> y
bidup :: c x y -> c (c x y) (c x y)
Run Code Online (Sandbox Code Playgroud)
可能与法律有关
fst . bidup ? id
snd . bidup ? id
bimap fst snd . bidup ? id
bimap bidup bidup . bidup ? bidup . bidup
Run Code Online (Sandbox Code Playgroud)
但我发现令人不安的是,结果的两个字段都bidup包含相同的类型,并且还有许多其他的,可能是"更好"的可想象的签名.
有什么想法吗?
这不是一个答案,但是对于Bimonad,这个怎么样?
class Biapplicative p => Bimonad p where
(>>==) :: p a b -> (a -> b -> p c d) -> p c d
biap :: Bimonad p => p (a -> b) (c -> d) -> p a c -> p b d
biap p q = p >>== \ab cd -> q >>== \a c -> bipure (ab a) (cd c)
instance Bimonad (,) where
(a,b) >>== f = f a b
Run Code Online (Sandbox Code Playgroud)
我不知道这是否绝对正确/有趣,或者甚至有点有用,但从 Haskell 的角度来看,它闻起来很正确。它与您的Bicomonad或类似的东西匹配吗?
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |