2017-05-28 15 views
6

私はこのコードがエラーなしでコンパイルされていることを見てきました。パラメトリック型を指定するのはコンパイラによって強制されません - これはバグですか、または予期されていますか?

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

Listとだけではありません。カスタムユニオンタイプも使用できます。例: - どのようにそれについて推論する

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. 

も機能は

function1 : List String -> Int 
function1 aListOfStrings = 
    1 

function2 : List -> Int 
function2 whatisThisNow = 
    1 

しかし、期待されている場合

を許可されていますか?私はそれの周りに私の心を包むことはできません。それで遊ぶ here

+0

最初の例はわかりました。部分的な関数型アプリケーションを実行することができます。しかし、他の2つは実際に制限されるべきもののように見えます(タイプが型関数である値がないためです)。 –

+0

これは混乱しているようです。あなたはSlackについて尋ねれば、おそらくもっとフィードバックを得るでしょう:http://elmlang.herokuapp.com/ – hkgumbs

答えて

1

最初は大丈夫です。 type alias Foo = Listを定義すると、Listの代わりにFooを使用できるはずです。

type alias Foo = List 

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

はそれを宣言する場合、その型の別名が完全に確認されていないようですので、全く使用することができないタイプのエイリアスを作成することが可能である。しかし、それは(エルム0.18で)コンパイルされません。

最初の例では、コンパイラを修正して正しくサポートすることができました。 2番目の例では、コンパイル時エラーとなるはずです。タイプList(またはState)の値を取得する方法がないためです。 HaskellersはList(またはState)の種類が* -> *であるとしますが、実行時の値は*にしかなりません。

私がすべき2つのコードスニペット..あなたが

type alias Foo a = List a 

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

に上記のコードを変更すると、それが正常に動作します、現在のエルムのバージョン(0.18)興味深いことに


にバグを発見したと思いますしかし同等です。

関連する問題