小编use*_*650的帖子

划分IO monad

很高兴知道(至少在Safe Haskell中)来自签名是否某些东西执行IO操作,但IO包含许多不同的东西 - putStr数据库访问,删除和写入文件,IORefs等.

如果我在运行任意代码时使用类型签名作为安全措施,那么我可能会愿意接受一些IO操作 - putStr例如 - 等等 - 而不是其他操作.

有没有办法定义IO monad的受限版本,只有一部分正常的IO操作?如果是这样,一个例子(putStr例如)将非常受欢迎!

io monads haskell

19
推荐指数
2
解决办法
1622
查看次数

重写规则并让GHC中的抽象

我有一个重写规则,如下所示:

{-# RULES
"modify/fusedModify" forall f g key book. modify key f (modify key g book) = fusedModify key f g book
  #-}
Run Code Online (Sandbox Code Playgroud)

在以下功能中触发:

pb :: PersonB
pb = ...

fusionB' :: PersonB
fusionB' =
  let l x = (modify #name ('c':) (modify #name ('a':) x))
  in l pb
Run Code Online (Sandbox Code Playgroud)

但是,没有让(并且可能是抽象?)它不会触发:

fusionB :: PersonB
fusionB = modify #name ('c':) (modify #name ('a':) pb)
Run Code Online (Sandbox Code Playgroud)

如果它走向另一个方向 - 也就是说,如果让抽象版本没有引起解雇,但fusionB确实如此 - 我想我明白了.可能是在特定情况下,fusedModify具有正确的类型签名,但在一般(更多态)情况下,它没有.但为什么在这个世界上我看到了这个?

对于它的价值,定义fusedModify在这里,文件与fusionB和 …

haskell ghc

14
推荐指数
0
解决办法
271
查看次数

为什么unsigned int在haskell中如此罕见?

通常,Haskell库使得不可能的状态在类型中不具代表性.但我经常看到Int只使用非负数才有意义.为什么Word不在这些情况下使用?

haskell

12
推荐指数
1
解决办法
1886
查看次数

自然转型中的算子在哪里?

自从我在Edward Kmett的旧类别附加包中看到自然变换定义以来,我就一直有这个问题.

-- | A natural transformation between functors f and g.
type f :~> g = forall a. f a -> g a
Run Code Online (Sandbox Code Playgroud)

但现在阅读斯蒂芬·迪尔的博客文章adjunctions,我觉得这样的:

在我们的上下文中的自然变换将是与两个Haskell仿函数实例f和g相关联的多态函数,其具有类型签名(Functor f,Functor g)=> forall a.fa - > g a.可以使用以下类型同义词编写.

type Nat f g = forall a. f a -> g a
Run Code Online (Sandbox Code Playgroud)

面对我的"我将继续无视这种"的态度,这是一记耳光.所以对于这个问题:为什么可以突然放弃仿函数约束?

haskell functor category-theory

8
推荐指数
1
解决办法
685
查看次数

具有相互依赖(同时)更新的镜头

让我们说:

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
import Control.Lens

data T a b = T { _foo :: a
               , _bar :: a -> b
               }

makeLenses ''T
Run Code Online (Sandbox Code Playgroud)

a出现在两个foobar,因此更新必须是"simulatenous",因为它是.没有镜头可以这样做:

eg1 :: T a (b -> c) -> b -> T (a, b) c
eg1 (T foo bar) b = T (foo, b) (uncurry bar)
Run Code Online (Sandbox Code Playgroud)

但是我怎么能用镜头呢?以下不适用于发生的检查:

eg :: T a (b -> c) -> b -> T (a, b) c
eg t b = …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-lens

7
推荐指数
1
解决办法
145
查看次数

NixOS中的NixOS?

我开始尝试NixOS部署。为此,我有一个定义了一些软件包的仓库,以及一个configuration.nix用于服务器的仓库。

看来我以后应该可以在本地测试此配置了(我也正在运行NixOS)。我想将全局 变量更改configuration.nix为指向部署服务器的部署是个坏主意configuration.nix(谁知道会破坏什么);但是是否有一种安全便捷的方法可以在本地“试用”服务器-即构建服务器并引导到服务器中,或者更好地将其作为单独的进程启动?

我当然可以看到docker是一种方式。也许没有别的了。但是我有这种模糊的感觉,尼克斯可能有能力独自做到这一点。

deployment virtualization nixos nix

4
推荐指数
3
解决办法
415
查看次数

编译好的私钥

从可以从可执行文件中推导出密钥的意义上来说,使用加密私钥分发已编译的程序(比如 C,绝对不是 Java)是否安全?如果多个可执行文件的不同之处仅在于在源中使用了不同的私钥,该怎么办?

我记得之前读到过,防病毒软件可以识别二进制可执行文件中的可疑模式,并且从汇编中似乎可以推断出密钥。

security cryptography compilation

1
推荐指数
1
解决办法
209
查看次数