来自http://research.microsoft.com/en-us/um/people/emeijer/Papers/meijer94more.pdf的第3页:
一般情况下,catamorphisms在组成下是封闭的
在什么条件下,catamorphisms构成了一个catamorphism?更具体地说(假设我正确地理解了陈述):
假设我有两个基础仿函数F和G每个折叠:foldF :: (F a -> a) -> (?F -> a)和foldG :: (G a -> a) -> (?G -> a).
现在假设我有两个代数a :: F ?G -> ?G和b :: G X -> X.
该构图何时成为(foldG b) . (foldF a) :: ?F -> X一个变形?
编辑:我有一个猜测,基于dblhelix的扩展答案:这outG . a :: F ?G -> G ?G必须是?G一些自然转换的组成部分? :: F a -> G a.我不知道这是否正确.( …
haskell functional-programming composition fold catamorphism
鉴于以下类型族(应该反映同构A×1≅A)
type family P (x :: *) (a :: *) :: * where
P x () = x
P x a = (x, a)
Run Code Online (Sandbox Code Playgroud)
和以其方式定义的数据类型
data T a = T Integer (P (T a) a)
Run Code Online (Sandbox Code Playgroud)
是否有可能通过某种类型的hackery Functor为后者编写实例?
instance Functor T where
fmap f = undefined -- ??
Run Code Online (Sandbox Code Playgroud)
直觉上,根据类型显而易见,该怎么做f,但我不知道如何在Haskell中表达它.
一些HTML元素(<div>,<span>,<p>,<h1>,<h2>,..., ,<h6> <b>,<i>等)似乎行为相同的方式,除了默认样式.例如,<span style="font-weight: bold;"> x </span>似乎相当于<b> x </b>.某些元素如<a>具有特殊属性但行为大致相同.
有人可以做到这一点吗?
特别是,是否存在"覆盖"所有HTML的元素子集?
编辑:我理解元素是为了携带语义.但是假设我不关心语义,我只想处理HTML的最小子集,这将使我能够访问某些给定的浏览器行为.我想知道如何找到该子集.