gpt4 book ai didi

variables - Elm - 检查值的类型

转载 作者:行者123 更新时间:2023-12-03 15:10:59 28 4
gpt4 key购买 nike

是否存在检查 Elm 中变量类型的函数?例如(复制):

numberTwo = 2
.....
returnType numberTwo
"number" : String

这样做的动机是当您使用 Signal.map[n] 时通常情况下,并非所有要应用的函数的参数都是信号 - 然后通常必须使用 Signal.constant 将它们“提升”为信号。 - 如果我可以检查这些参数的类型,我可以创建一个函数 Signal.allSigMap[n]这会自动将这些参数转换为信号。

所以
Signal.map2 grandFatherClock clockSignalElement (Signal.constant cabinetElement)

变成
Signal.allSigMap2 grandFatherClock clockSignalElement cabinetElement

虽然可能是不好的做法。请告诉我。

最佳答案

我会第一时间回复您的使用意向returnType作为一种根据需要提升类型的方式 Signal .这将意味着 returnType或沿途的其他一些函数实际上返回一个类型而不是 String因为没有其他方法可以让类型检查器满意。

这样的功能不存在,也不可能存在于今天的 Elm 中。您要求的是可以检查值编译时的类型,然后在该类型上运行函数的东西。

要了解为什么这与 Elm 中当前存在的任何东西完全不同,让我们假设存在这样一个函数。

returnType : a -> ?

我们立即面临第一个问题,即 returnType 的类型究竟是什么? .让我们手动挥手,并假设我们有一个类型为 Type 的所有类型。 (它有自己的一套逻辑问题,我们将搁置一旁)。
returnType : a -> Type

我们如何实际使用这个功能?大概它可以进入类型签名,因为它返回一个类型。
 x : returnType 5

现在这是一个与 Elm 中其他所有东西完全不同的类型签名。有一个数字文字(和一个函数)!突然之间你就可以开始写这样的东西了。
y = 5

x : returnType y
x = 6

这远远超出了 Elm 的类型系统所能做的。那种(令人兴奋和强大的)类型级别和值(value)级别的混合被称为 dependent typing并且不存在主流的完全依赖类型语言;最接近主流的可能是 Coq、Agda、Idris 和 ATS,它们都相当模糊。

至于字面上所说的具有函数的问题 returnType : a -> String打印出一个表示值类型的字符串,这在 Elm 中也是不可能的,尽管出于其他原因。这样的函数(它的应用程序在运行时发生的东西)必须能够重建关于运行时值的类型信息,但 Elm 的运行时值只是 Javascript 值;他们被剥夺了榆树类型。您必须要么从 Javascript 值重建原始 Elm 类型(并非总是可能的,因为不同的类型可能最终成为相同的 Javascript 值)或具有特殊的编译器支持。

在 Elm REPL 的情况下,选择后者。整个 REPL 是用 Haskell 编写的,并利用了在 Haskell 运行时中实现 Elm 类型的方式。

关于variables - Elm - 检查值的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36535368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com