我将如何推导函数
getField :: (Generic a, HasDatatypeInfo a) => Proxy (name :: Symbol) -> a -> b
Run Code Online (Sandbox Code Playgroud)
使用类型级字符串 ( Symbol),使用generics-sop库从任意记录中投影字段?
这类似于在通用 SOP 中检索记录功能,但我有以下问题:
DataTypeInfo是通过DatatypeInfoOf类型系列提供的(很好,但不是必需的)。该lens-sop软件包似乎也做了类似的事情,但我不知道如何让它对我有用。
我也更喜欢使用IsProductType类型类的解决方案。
haskell metaprogramming ghc type-level-computation ghc-generics
我经常使用类型孔来定义我知道其接口并打算稍后实现的函数。当我运行时cabal build,它会在第一个模块遇到类型漏洞后停止,隐藏其他模块中可能存在的类型错误。
有没有什么方法可以对项目进行类型检查,并且只有在整个项目构建并进行类型检查后才会因类型错误而失败?
有没有办法检测 Haskell 中的冗余约束?
例如:
class (A a, B a) => C1 a -- C1 ~ A AND B
instance (A a, B a) => C1 a
class (A a, B a, C a) => C2 a
instance (A a, B a, C a) => C2 a
f :: (C1 a, C2 a) => a
f = ...
Run Code Online (Sandbox Code Playgroud)
这里,C2 暗指C1,并且在签名中使用C1f是多余的,即重言式。
在现实世界的元编程的情况下,这将是waaaay更加复杂,并会显著帮助去杂波签名头,以及帮助我了解和跟踪是怎么回事的。
鉴于 GHC 的形式主义,这在逻辑上是否可行?
GHC 内的基础设施是否可用?
我想通过 U 盘在我的工作计算机和笔记本电脑之间移动 Haskell 项目。我正在使用堆栈构建系统。我的笔记本电脑经常远离互联网,有时当我最初插入 USB 时,所以如果我只是复制项目,我将丢失 GHC 工具链和笔记本电脑上的所有库。我希望能够插入笔记本电脑并工作,即使没有连接。
我见过的各种解决方案告诉我使用某些堆栈标志并复制 ~/.stack目录,但我从未成功获得成功的构建 - 这似乎是一种相当脆弱的方法。我也很欣赏一些自动化,最好是一些版本支持。
Nix 会帮助解决这种情况吗?Nix 的 Docker 集成功能怎么样?(我对 Nix 的了解很少,也没有 Docker 经验,但我愿意了解它是否对我有帮助。)我想保留使用基于笔记本电脑的工具的能力,例如 VS Code。