[解決済み] Haskellの[]と':'とは何ですか?
2022-02-26 21:44:36
質問
こんなの見たことある
'[]
と
':
のようなヘテロジニアスリストパッケージを中心に、いくつかの場所で構文が使用されています。
HList
または
HVect
.
例えば、ヘテロジニアスベクトル
HVect
は次のように定義されます。
data HVect (ts :: [*]) where
HNil :: HVect '[]
(:&:) :: !t -> !(HVect ts) -> HVect (t ': ts)
GHCiでは、拡張子
TemplateHaskell
または
DataKinds
このようになります。
> :t '[]
'[] :: template-haskell-2.13.0.0:Language.Haskell.TH.Syntax.Name
> :t '(:)
'(:) :: template-haskell-2.13.0.0:Language.Haskell.TH.Syntax.Name
テンプレートhaskellではなく、依存型や種類などに関係する印象がありました。
検索エンジンで、しかも
フーグル
を、そして
ハユー
でクエリを処理します。
'[]
または
':
という質問がありました。
これらの名称は何ですか?
'[]
と
':
のこと?
ドキュメントやチュートリアルの紹介は大歓迎です。
どのように解決するのですか?
DataKinds
は、項レベルのコンストラクタを型レベルで使用できるようにします。
その後
data T = A | B | C
の値でインデックスされた型を書くことができます。
T
data U (t :: T) = ...
foo :: U A -> U B -> ...
ところが、ここで
A
と
B
は値としてではなく型として使用されます。従って、それらは引用符を使用して "promoted"する必要があります。
data U (t :: T) = ...
foo :: U 'A -> U 'B -> ...
おなじみのリスト構文でも同じことが言えます。
'[]
は型レベルで昇格した空リストです。
'[a,b,c]
と同じです。
a ': b ': c ': '[]
のように、型レベルで昇格するリストです。
type :: kind
'[] :: [k] -- polykinded! works for any kind k
'[ 'A, 'B, 'C] :: [T] -- mind the spaces, we do not want the char '['
'A ': '[] :: [T]
'[ Int, Bool ] :: [*] -- a list of types
'[ Int ] :: [*] -- a list of types with only one element
[Int] :: * -- a type "list of Int"
最後の2つのケースは、引用符によって構文が曖昧になることに注意してください。
関連
-
[解決済み] Haskellでwhileループに相当する文は何ですか?
-
[解決済み] Haskellの[]と':'とは何ですか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C++のPOD型とは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】なぜモナドが必要なのか?
-
[解決済み】Haskellの入門編
-
[解決済み】Haskell/GHCの`forall`キーワードは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] haskellでCharからIntに変換する
-
[解決済み] Haskellでwhileループに相当する文は何ですか?
-
[解決済み] Haskellの[]と':'とは何ですか?
-
[解決済み] Haskell takeWhile + 1
-
[解決済み】代数的なデータ型の代数を悪用する - なぜこれが有効なのか?
-
[解決済み】Haskellの宣言におけるエクスクラメーションマークの意味とは?
-
[解決済み】Haskell: リスト、配列、ベクトル、シーケンス
-
[解決済み】Not a Functor/Functor/Applicative/Monadの良い例?
-
[解決済み】一般的なHaskellの演算子で発音可能な名前はありますか?[クローズド]
-
[解決済み】Haskell の `data` と `newtype` の違いについて