Elm 按模块/命名空间引用内置类型

Elm 按模块/命名空间引用内置类型,elm,Elm,我不想做的是: 类型别名字符串= {prop:String--这里我想要一个本机字符串 } 这将不起作用,因为编译器自然会假定它是递归的。我假设某个模块会公开本机类型,但Basics.String和String.String都不起作用 那么,有没有一种方法可以让您自己的类型使用与本机类型相同的名称,并且仍然引用本机类型?从可读性的角度来看,我不确定这是一个好主意,但是为了解决是否可能的问题,如果您在不同的模块中为String创建一个别名,它会起作用 类似这样的方法会奏效: 别名:埃尔姆 梅因·

我不想做的是:

类型别名字符串=
{prop:String--这里我想要一个本机字符串
}
这将不起作用,因为编译器自然会假定它是递归的。我假设某个模块会公开本机类型,但
Basics.String
String.String
都不起作用


那么,有没有一种方法可以让您自己的类型使用与本机类型相同的名称,并且仍然引用本机类型?

从可读性的角度来看,我不确定这是一个好主意,但是为了解决是否可能的问题,如果您在不同的模块中为
String
创建一个别名,它会起作用

类似这样的方法会奏效:

别名:埃尔姆 梅因·埃尔姆
别名名为
ElmString
,已导入但未使用。。。那么它如何帮助消除歧义呢?
typealiasstring={prop:String}
?我想你的意思是
typealiasstring={prop:ElmString}
。这是一个有趣的解决方案;我基本上可以创建自己的“基础”模块。不过,对于我的用例(生成的代码),它不是非常理想,所以我将稍等片刻,看看是否还有其他建议。@AndreasHultgren,你是对的,我的示例错了,我已经修复了它。如果不使用您自己的模块作为内置类型的命名空间,就无法做到这一点,就像上面的别名模块所做的那样。原因是内置字符串模块名只是字符串,如果您在自己的代码中创建一个名为字符串的类型,编译器将忘记该文件的内置字符串。
module Alias exposing (..)

type alias ElmString = 
    String
module Main exposing (..)

import Alias exposing (ElmString)

type alias String = 
    { prop: ElmString
    }