作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的一个旧项目中有以下代码:
-- |ImageOperation is a name for unary operators that mutate images inplace.
newtype ImageOperation c d = ImgOp (Image c d-> IO ())
-- |Compose two image operations
(#>) :: ImageOperation c d-> ImageOperation c d -> ImageOperation c d
(#>) (ImgOp a) (ImgOp b) = ImgOp (\img -> (a img >> b img))
-- |An unit operation for compose
nonOp = ImgOp (\i -> return ())
-- |Apply image operation to a Copy of an image
img <# op = unsafeOperate op img
-- | Apply the operation on a clone of an image
operate (ImgOp op) img = withClone img $ \clone ->
op clone >> return clone
unsafeOperate op img = unsafePerformIO $ operate op img
poorMansHighPass img = do
x <- clone img
gaussian (5,5) x
subtract x img
return x
最佳答案
好吧,我至少可以指出如何称呼您当前正在使用的某些模式。
因此,我们有一个表示对某些可变数据的引用的类型,以及一个表示对它进行不透明操作的类型。我们还有一个空操作和一个组合函数,它给出了一个明显的Monoid
实例:
instance Monoid (ImageOperation c d) where
mempty = nonOp
mappend = (#>)
Monoid
实际上是其他两个众所周知的类型的属性的直接结果:
Applicative
的
Monad
和/或
(->) a
实例通过将所有功能应用于单个参数来描述组合功能,就像合成功能中的图像一样。基本上是
Reader
monad的轻量级嵌入式版本。
Monad
的
IO
实例,或者它所隐含的单面结构。通过将
IO
的type参数固定为
()
,monad定律简化为简单的monoid,以
return ()
为单位,以
(>>)
作为monoid操作。
ImageOperation
),并想象
IO ()
的隐式monoid是实际的实例,我们可以这样写:
nonOp = pure mempty
x #> y = mappend <$> x <*> y
ReaderT
和
STM
显式构造了这种monad。
Image
,而我正在收集您希望仅对克隆进行操作,而其创建效率很低。幸运的是,考虑到
Monoid
的上述结构的通用性,在真正运行
ImageOperation
之前,您确实没有什么可以塞进
IO
的。生成克隆大概是
operate
操作,这是我假设正在
Image
中进行的操作-实际上可能没有其他方法可以执行此操作。
operate
换成代表构建过程的某种东西,并合并运算符以使用类似
operate
。不过,我不知道这是否真的可以给您带来任何好处。
ImageOperation
。这有什么实际目的?
ImageOperation
上进行操作之外,没有什么其他可以做的了。您是说要泛化
IO ()
来处理一个图像的多个可变引用吗?还是涉及对图像的操作返回了除
poorMansHighPass
以外的内容?
gaussian
。希望我在这里正确阅读了它在做什么:
gauss' = ImgOp . gaussian
是独立的,可以分解为自己的操作:
subtract
。
Image
排除在外,并通过附加的
subtr' = ImgOp . flip subtract
:
poorMansHP' img = gauss' (5, 5) #> subtr' img
进行参数设置。
img
。恢复原始功能的最后一件事是,赋予
poorMansHP'
的
operate
参数必须是同一图像,其副本将由
ImageOperation
传递给内部函数。
withClone
并将其用于重新实现中:
poorMansHighPass img =
let (ImgOp op) = gauss' (5, 5) #> subtr' img
in do x <- clone img
op x
return x
clone
代替
do
:
poorMansHighPass img =
let (ImgOp op) = gauss' (5, 5) #> subtr' img
in withClone img $ \x -> do op x
return x
operate
块进行解糖:
poorMansHighPass img =
let (ImgOp op) = gauss' (5, 5) #> subtr' img
in withClone img $ \x -> op x >> return x
poorMansHighPass
的重新实现,因此请替换并简化:
poorMansHighPass img = operate (gauss' (5, 5) #> subtr' img) img
ImageOperation
,这将允许将其打包为
关于haskell - 更好的接口(interface)来构成破坏性运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059505/
您好,我正在使用 AWS EKS 开发 kubernetes。当我将 docker-compose 文件转换为 kompose 文件时,我遇到了 kompose 文件的问题,我遇到了卷挂载点问题,而且
在将密码转换为二进制哈希值以存储在数据库中时,我注意到除了通常的乱码之外,还有一些引号、空格和字母表,这些巧合可能构成有效 SQL 语句的一部分。 出于好奇,我想知道是否有人遇到过任何字符串在哈希后神
我的组件具有动态部分和 compose。动态部分在其他模块中,即节点项目。 如果我想在页面中使用自定义元素,例如: 我收到一条错误消息,指出无法在 ./my-custom-element/someV
我有一个 pandas 数据框,其中一列由数组组成。所以每个单元格都是一个数组。 假设数据框 df 中有一个列 A,这样 A = [ [1, 2, 3], [4, 5, 6],
当 HTTP 请求和响应在互联网上传输时,请求中文本的格式是什么?是 ASCII 码吗? 例子:如果 HTTP 请求如下所示 - GET /mysite/ HTTP/1.1 -- rest of t
我是一名优秀的程序员,十分优秀!