2017-05-28 22 views
6

Bu kodun hatasız bir şekilde derlendiğini gördüm ve bir hata mı, yoksa beklenen mi olduğunu söyleyemiyorum.Parametrik tür belirtmek derleyici tarafından zorlanmaz - bu bir hata mıdır veya bekleniyor?

type alias Foo = List 
vs 
type alias Foo = List String 

ve sadece List ile. Özel birlik türleri de izin verilir. Ör: - nasıl bu konuda ikna etmeye

type State value = Valid value | Invalid value 

type alias Model1 = 
    { someField : State String } -- i would say this is normal. State is a string.. 

type alias Model2 = 
    { someField : State } -- this doesn't look right. 

ve ayrıca fonksiyonları

function1 : List String -> Int 
function1 aListOfStrings = 
    1 

function2 : List -> Int 
function2 whatisThisNow = 
    1 

Ama bekleniyorsa

izin veriliyor? Aklımı etrafına dolamıyorum. Onunla here oynayın.

+0

İlk örnek bana Tamam görünüyor: kısmi işlev türü uygulama yapmasına izin verir. Ama diğer ikisi de kısıtlanması gereken bir şey gibi görünüyorlar (çünkü türü bir işlev olan bir değer yoktur). –

+0

Bu, kafa karıştırıcı gibi görünmüyor. Yine de Slack'i sorsaydınız daha fazla geri bildirim alırsınız: http://elmlang.herokuapp.com/ – hkgumbs

cevap

1

İlk bakışlar iyi. type alias Foo = List tanımlamak, List yerine Foo kullanmanıza izin vermelidir.

type alias Foo = List 

names : Foo String --does not compile 
names = ["a", "b"] 

O ilan ettiğinde o tip adlar tam kontrol edilmediği görünüyor, nedenle hiç kullanılamaz tipi takma ad oluşturmak mümkündür: Ama (Elm 0.18 ile) derlemek etmez. İlk örnek için derleyici düzgün bir şekilde desteklenecek şekilde düzeltilebilir. İkinci örnek, derleme zamanı hatası olsa da, List (veya State) türünde bir değer elde etmenin hiçbir yolu yoktur. Haskellers List (veya State) türünün * -> * türüne sahip olduğunu söyleyebilir, ancak çalışma zamanında değerler yalnızca * türüne sahip olabilir.

Sana doğru .. iki kod parçalarını gerektiğini çalışmak yapar

type alias Foo a = List a 

names : Foo String 
names = ["a", "b"] 
-- compiles with Elm 0.18 

için yukarıdaki kodu değiştirmeden, (0,18)


İlginçtir geçerli Elm sürümünde bir hata buldum sanırım buna denk olmak.

İlgili konular