我有一个在类型级列表上映射类型系列的最小工作示例(从单例库中剔除):
{-# 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) 我使用的是optparse-applicative0.7.0.2版本.
我想写一个解析器,需要一些强制性的选择,但是,当不使用任何选项调用它表明两者的使用和帮助,而不是仅仅使用(也就是说,我想不带任何选项调用表现为与调用--help).
我无法弄清楚如何做到这一点,即使文档说它是可能的:
此示例中的hello选项是必需的(因为它没有默认值),因此运行没有任何参数的程序将显示帮助文本
这是一个有效的例子吗?主文档中的那个对我不起作用(仅打印用法.)
我对 Bash 比对 Powershell 更熟悉,有时我对后者的对象模型感到困惑。
查看Get-FileHash的文档,似乎有 3 种指定输入的方法:
前两个取文件名,第三个取数据流。
现在,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?
我正在查看这些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) 我正在使用 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)
我是否使用了错误的命令,还是这是一个错误?
cabal 的当前文档显示了一个sandbox子命令。
github 上的相应页面不再包含沙箱部分。
我使用的是 cabal 版本 3.2.0.0,但sandbox子命令不存在。使用 cabal 管理沙箱的正确方法是什么?
显然,文档正在进行彻底修改,其中提到了Nix 风格/new-/v2 命令,但菜鸟不清楚使用 cabal 沙箱的规范方式是什么。
我有这个类型类:
\nclass Monad m => Convertible m a b where\n convert :: a -> m b\nRun Code Online (Sandbox Code Playgroud)\n对于许多类型对,可以纯粹完成转换,而不需要一元效果。
\n现在,我知道我可以编写一个相关的类型类,例如
\nclass PureConvertible a b where\n convertPurely :: a -> b\nRun Code Online (Sandbox Code Playgroud)\n然后使一个成为另一个的超类,和/或使用 . 根据另一个定义一个的实例DerivingVia。
但问题是关于不同的事情。如果我定义一个类型同义词怎么办
\nimport Data.Kind\ntype PureConvertible :: Type -> Type -> Constraint\ntype PureConvertible a b = forall m . Monad m => Convertible m a b \nRun Code Online (Sandbox Code Playgroud)\n这个想法是,如果我的转换不需要任何具体单子的特征,我也许可以m在定义实例时避免提及。Convertible一次尝试:
instance PureConvertible Int String where\n convert _ = …Run Code Online (Sandbox Code Playgroud) 我有一个字符串,几乎可以包含任何字符。在字符串中有定界符{{{。
例如:afskjdfakjsdfkjas{{{fasdf。
使用attoparsec,编写a的惯用方式是什么Parser (),它跳过之前的所有字符{{{,但又不消耗{{{?
我试图就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) 我知道我可以通过在文件的 部分中列出本地包来将其添加到 cabal 项目中。最简单的示例是.packages:cabal.projectpackages: .
我还cabal.project可以添加这两件事:
source-repository-package
type: git
location: git@github.com:haskell-streaming/streaming.git
tag: eb3073e6ada51b2bae82c15a9ef3a21ffa5f5529
Run Code Online (Sandbox Code Playgroud)
本地无索引存储库的定义
repository my-local-repository
url: file+noindex:///home/zzz/no-index-repo-dir
Run Code Online (Sandbox Code Playgroud)
看来他们都让我将包添加到项目中。两者有什么区别?
(注意:这个问题与类似名称的source-repository:字段无关,该字段只是说明哪个是与包的源代码关联的存储库。)