小编dan*_*iaz的帖子

为什么这段代码不会侵犯"类型家庭的饱和度要求"?

我有一个在类型级列表上映射类型系列的最小工作示例(从单例库中剔除):

{-# language PolyKinds #-}
{-# language DataKinds #-}
{-# language TypeFamilies #-}
{-# language TypeOperators #-}

data TyFun :: * -> * -> *

data TyCon1 :: (k1 -> k2) -> (TyFun k1 k2 -> *)

type family Apply (f :: TyFun k1 k2 -> *) (x :: k1) :: k2
type instance Apply (TyCon1 f) x = f x

type family Map (f :: TyFun a b -> *) (as :: [a]) :: [b] where
    Map …
Run Code Online (Sandbox Code Playgroud)

haskell type-level-computation

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

optparse-applicative:显示没有参数调用的程序的帮助

我使用的是optparse-applicative0.7.0.2版本.

我想写一个解析器,需要一些强制性的选择,但是,当不使用任何选项调用它表明两者的使用和帮助,而不是仅仅使用(也就是说,我想不带任何选项调用表现为与调用--help).

我无法弄清楚如何做到这一点,即使文档说它是可能的:

此示例中的hello选项是必需的(因为它没有默认值),因此运行没有任何参数的程序将显示帮助文本

这是一个有效的例子吗?主文档中的那个对我不起作用(仅打印用法.)

haskell command-line-arguments applicative

7
推荐指数
2
解决办法
633
查看次数

为什么“Get-ChildItem -File | Get-FileHash”有效?

我对 Bash 比对 Powershell 更熟悉,有时我对后者的对象模型感到困惑。

查看Get-FileHash文档,似乎有 3 种指定输入的方法:

  • Get-FileHash [-Path]
  • Get-FileHash [-LiteralPath]
  • Get-FileHash [-InputStream]

前两个取文件名,第三个取数据流。

现在,Get-ChildItem -File似乎输出System.IO.FileInfo对象,从什么Get-Member说:

$ Get-ChildItem -File | Get-Member
TypeName: System.IO.FileInfo
Run Code Online (Sandbox Code Playgroud)

然而管道Get-ChildItem -File | Get-FileHash工作正常。我的问题是,允许转换System.IO.FileInfo为预期的输入类型的机制是什么Get-FileHash

powershell

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

“These”的“Applicative”实例能否保留更多“失败”信息?

我正在查看这些These包中的数据类型,特别是在其实例中:Applicative

instance (Semigroup a) => Applicative (These a) where
    pure = That
    This  a   <*> _         = This a
    That    _ <*> This  b   = This b
    That    f <*> That    x = That (f x)
    That    f <*> These b x = These b (f x)
    These a _ <*> This  b   = This (a <> b)
    These a f <*> That    x = These a (f x)
    These a f <*> These b x …
Run Code Online (Sandbox Code Playgroud)

haskell applicative

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

如何在商店中找到派生路径,从编译后的包路径开始?

我正在使用 Nix 2.2.1,特别是这个NixOS Docker 镜像。

我像这样安装 Vim:

# nix-env --install --file '<nixpkgs>' vim
Run Code Online (Sandbox Code Playgroud)

Vim 可执行文件的存储路径是

# readlink -f $(which vim)
/nix/store/8ayymgnlv77p0h8skf294323maabwq91-vim-8.1.0675/bin/vim
Run Code Online (Sandbox Code Playgroud)

现在想从编译好的包路径中找出store中的派生路径。

我试过这个命令

# nix-store --query --deriver $(readlink -f $(which vim))
/nix/store/q5zqdr193d8k5w91lb9wqr1wk3418zix-vim-8.1.0675.drv
Run Code Online (Sandbox Code Playgroud)

这确实返回了商店中的路径,但令我惊讶的是,该路径不存在!商店中有一个vim的派生,但它与命令的输出不匹配。

我也试过这个:

# nix-env --query --drv-path --file '<nixpkgs>' vim
Run Code Online (Sandbox Code Playgroud)

但它没有给出有用的结果:

vim-8.1.0675  -
Run Code Online (Sandbox Code Playgroud)

我是否使用了错误的命令,还是这是一个错误?

nix

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

如何管理阴谋集团沙箱

cabal 的当前文档显示了一个sandbox子命令。

github 上的相应页面不再包含沙箱部分。

我使用的是 cabal 版本 3.2.0.0,但sandbox子命令不存在。使用 cabal 管理沙箱的正确方法是什么?

显然,文档正在进行彻底修改,其中提到了Nix 风格/new-/v2 命令,但菜鸟不清楚使用 cabal 沙箱的规范方式是什么。

haskell cabal cabal-install cabal-sandbox

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

声明实例时是否可以使用类型同义词来隐藏类型变量?

我有这个类型类:

\n
class Monad m => Convertible m a b where\n  convert :: a -> m b\n
Run Code Online (Sandbox Code Playgroud)\n

对于许多类型对,可以纯粹完成转换,而不需要一元效果。

\n

现在,我知道我可以编写一个相关的类型类,例如

\n
class PureConvertible a b where\n  convertPurely :: a -> b\n
Run Code Online (Sandbox Code Playgroud)\n

然后使一个成为另一个的超类,和/或使用 . 根据另一个定义一个的实例DerivingVia

\n

但问题是关于不同的事情。如果我定义一个类型同义词怎么办

\n
import Data.Kind\ntype PureConvertible :: Type -> Type -> Constraint\ntype PureConvertible a b = forall m . Monad m => Convertible m a b \n
Run Code Online (Sandbox Code Playgroud)\n

这个想法是,如果我的转换不需要任何具体单子的特征,我也许可以m在定义实例时避免提及。Convertible一次尝试:

\n
instance PureConvertible Int String where\n  convert _ = …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass type-synonyms

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

Attoparsec:跳过(但不包括)多字符定界符

我有一个字符串,几乎可以包含任何字符。在字符串中有定界符{{{

例如:afskjdfakjsdfkjas{{{fasdf

使用attoparsec,编写a的惯用方式是什么Parser (),它跳过之前的所有字符{{{,但又不消耗{{{

parsing haskell attoparsec

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

类型级别的计算何时会与类型族“发生”?

我试图就Haskell中的类型族“发生”何时(以及多少次)进行类型级计算形成一种直觉。举一个具体的例子,考虑使用此类型类使用类型级别的自然数索引到n元产品中

{-# LANGUAGE DataKinds, TypeOperators, KindSignatures, TypeFamilies, MultiParamTypeClasses,
             ScopedTypeVariables, TypeApplications, AllowAmbiguousTypes
#-}
import Data.Kind (Type)
import Data.SOP (I(..),NP(..)) -- identity functor and n-ary product from "sop-core"

data N = Zero | Succ N -- to be used as a kind

class Key (i :: N) (ts :: [Type]) where
    type Value i ts :: Type
    getValue  :: NP I ts -> Value i ts

instance Key Zero (t:ts) where
    type Value Zero (t:ts) = t
    getValue (I v …
Run Code Online (Sandbox Code Playgroud)

haskell type-families type-level-computation

5
推荐指数
0
解决办法
151
查看次数

Cabal 中“source-repository-package”和“本地无索引存储库”之间的区别

我知道我可以通过在文件的 部分中列出本地包来将其添加到 cabal 项目中。最简单的示例是.packages:cabal.projectpackages: .

我还cabal.project可以添加这两件事:

看来他们都让我将包添加到项目中。两者有什么区别?

注意:这个问题与类似名称的source-repository:字段无关,该字段只是说明哪个是与包的源代码关联的存储库。)

haskell cabal

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