我是 OCaml 的新手。 我正在编写一个简单的汇编程序编译器。 我在我的 AST 中使用了以下类型。 我认为类型很好,因为它们禁止对不同的(按位)寄存器进行操作。 但现在我有一个问题。 我不知道如何像下面这样写 function 我只是不知道如何获得一个 function,它接受一个字符串(或未明 ...
我在 Haskell 中试验幻象类型。 我的目标是通过类型类将LangCode类型转换为相应的幻象类型表示,例如DE到Lang DE 。module Main (main) where import Data.Proxy (Proxy(..)) data DE data EN data Lan ...
考虑以下使用幻像类型的程序:const strlen = (str: string) => str.length; type Const<A, B> = { type: 'Const', value: A }; const Const = <A, B = never&g ...
我无法理解为什么编译器允许当前代码。 我使用幻像类型来保护对方法的访问。 只有在特定的“状态”下才允许调用方法。 在大多数情况下,这个不变量确实是经过编译验证的。 然而,有时编译器只是忽略了幻像类型所施加的约束。 这感觉像是一个重大错误。 我不明白什么? 我试图尽可能地简化问题。 我的用例更复杂:c ...
在 Rust 中,我想使用幻像类型来正确键入一个简单的 id:struct Id<T> { val: u32, _type: PhantomData<T>, } 在初稿版本中,我使用具体结构作为T ,一切都很好。 然后在使用不同数据源的更精细的版本中,这些结 ...
我知道 Haskell 中的许多名称都受到范畴论术语的启发,我试图准确理解类比的开始和结束位置。 类别Hask 由于有关严格/懒惰和seq的一些技术细节,我已经知道Hask不是(必然)一个类别,但现在让我们把它放在一边。 为了清楚起见, Hask的对象是具体类型,即 kind *的类型。 这包括 ...
我在弄清楚如何在列表中的 ST monad 中运行计算时遇到了一些麻烦。 但是尝试编译它会出现以下错误: 如果我在 IO monad 中运行它,这将是一个简单的替换pure. map runST pure. map runST与traverse runIO (或其他),但我还没有弄清楚如何解决幻像 ...
我发现PhantomData中 PhantomData 的概念相当混乱。 我在基于 FFI 的代码中广泛使用它来限制 object 的生命周期,但我仍然不确定我是否正确执行。 这是我经常最终使用它的人为示例。 例如,我不希望MyStruct的实例比Context的实例寿命长:// FFI decl ...
假设我有一个参数只为类型系统的利益而存在,例如在这个小程序中: {-# LANGUAGE GADTs #-} module Main where import Data.Proxy import Data.List data MyPoly where MyConstr :: Proxy a - ...
假设我们定义了一个具有许多字段的通用结构,使用幻像类型表示类型安全的状态机: struct Foo<State> { a: A, b: B, c: C, //... state: PhantomData<State>, } 然后我们 ...
我正在尝试使用类型系统来确保 X 永远不会从 monad M 中取出。我希望它的工作方式类似于runST ,其中不可能混合来自不同线程的环境。 但是,以下代码不会导致类型错误: 为什么 ST monad 中的类似代码会抛出错误而我的不会? 据我了解的s在M sa应该成为约束,使得s在X s游 ...
例如,我有两种标记类型: 该类型用于处理模型。 第一个用于通用模型,第二个用于db实体。 我的资料中有一个转换器: 此转换无法编译,导致e.created.toLocalDateTime返回LocalDateTime ,但Entity需要由Created标记的LocalDateTime ...
我正在浏览一些生锈的源代码,我找到了一个名为PhantomData的数据类型。 我正在浏览生锈文档,并在互联网上搜索了很多。 但是,我无法理解这种数据类型的实际使用情况。 如果可能的话,有人可以用简单的方式向我解释一下吗? ...
在 Haskell 中探索和研究类型系统我发现了一些问题。 1)让我们将多态类型视为二叉树: 并且,例如,我只想将我的考虑限制为Tree Int 、 Tree Bool和Tree Char 。 当然,我可以做一个这样的新类型: 但是是否有可能以更优雅的方式(并且没有像T1 、 T2 、 ...
有一个着名的类型级自然数的例子: 当我们应用类型构造函数Succ时,我有一个关于理想限制的问题。 例如,如果我们想在函数定义中进行这样的限制,我们可以使用类和上下文,就像在这段代码中一样: 使用toInt (undefined :: Succ Int)是不可能的,没关系。 ...
我想了解arithmoi软件包( https://hackage.haskell.org/package/arithmoi-0.8.0.0 )中幻像类型的使用。 这有助于检查我是否正在使用正确的残渣类别( Z/nZ )。 有问题的幻像类型是data Mod (n :: Nat) = Mo ...
我正在尝试实现一个CurrencyQty类型,它类似于在编译时标记的数字: 现在我想实现一个动态查找汇率的通用转换函数。 假设我有一些功能 我想写 或者不知何故 我正在使用的语法显然是无效的haskell ...有没有办法实现这一目标? ...
我有一个结构,需要在一个类型上是通用的,但该类型实际上并不包含在结构中:它用于此结构的方法,而不是结构本身。 因此,该结构包括一个PhantomData成员: 幻像成员被定义为指针,因为该结构实际上不拥有类型T的数据。 这是std::marker::PhantomData文档中的 ...
我有JSON看起来像: 数组中的对象当然具有除range的字段,但无关紧要。 是否可以将它们反序列化为具有两种幻像类型的元组,以指示开始和结束是自动包含还是独占? 这也可以通过将数字反序列化为某种具有幻像类型的元组来解决。 这不起作用,因为serde_json似乎对P ...