GHC 8.0で-XTypeApplications
を指定すると、関数の引数の前に@
の型を明示的に指定できます。正確には何種類のタイプが指定されますか?特に@
がいくつか導入されていますか?HaskellではどのようにTypeApplicationsを使用していますか?
5
A
答えて
5
あなたが関数の型
elem :: (Foldable t, Eq a) => a -> t a -> Bool
を見れば、我々は、それは2つの多型の変数、t
とa
を持って参照してください。これらの変数は、@
タイプアプリケーションが指定するものです。文脈に導入された変数は、型クラスの制約が適用されるので、最初の@
はt
を指定し、2番目はa
を指定しているようです。コンテキスト変数なしの関数で
const :: a -> b -> a
順序は、より明白であるa
は最初であり、b
が第二です。上記のコメントでCactusが言及しているように、明示的なforallsを使って自分で注文を指定することもできます。
myConst :: forall b a. a -> b -> a
ここで第一のタイプのアプリケーションはb
及び第二a
を指定します。
あなたが過負荷に文字列やリスト
elem c "abc...xyz" -- What string type is this?
elem c ['a' .. 'z'] -- What list constructor is this?
を使用している場合は、それゆえ我々はこの場合のみ
elem @[] @Char c ['a' .. 'z']
明示的なタイプのアプリケーションを使用し、特にタイプを指定する必要がこの問題に遭遇することがありには@[]
を指定するのにがあり、GHCはリストの要素からChar
を推定するので "これは[]
リスト型のコンストラクタです"というのでここではを省略できます。
GHCは推測することができます多型の引数は、最初にあなたが作るために、あなただけのタイプ[の一部]というを推測するGHCを言って、タイプのアプリケーションシグネチャを含む型シグネチャで_
を使用することができます-XPartialTypeSignatures
を活用することができます来て発生した場合物事はそれほど冗長ではない。
f @_ @[]
関連する問題
- 1. Haskellのseqはどのように使用されていますか?
- 2. HaskellライブラリLinearを使用して、どのようにベクトルをスケーリングしますか?
- 3. haskellアプリケーションでcairoを使用してgtk3ステータスシステムにレンダリングするにはどうすればよいですか?
- 4. OpenCL HaskellプログラムでclSetKernelArgを使用してローカルメモリサイズを設定するにはどうすればよいですか?
- 5. getLineはどのようにhaskellで動作しますか?
- 6. Haskellを使用してデータベース間を移動するにはどうすればよいですか?
- 7. haskellでgetLineまたはgetCharを使用するにはどうすればよいですか?
- 8. どのようにHaskellで
- 9. Haskell開発用にSublime 2を使用していますか?
- 10. なぜhaskellのネットワークライブラリはノンブロッキングソケットを使用していますか?
- 11. GHCi 8.0.1用のHaskellポータブルインストールオプションはどのように動作しますか?
- 12. HaskellでControl.Exception.catchを正しく使用するにはどうすればよいですか?
- 13. Haskellでポインタをどのようにエミュレートできますか?
- 14. Haskellのライブラリバージョンをどのように検索しますか?
- 15. この例ではdupをどのように使用していますか?
- 16. Haskell FFI:C++コレクションをどのようにラップしますか?
- 17. dart 1.0ではどのようにOAuth2を使用していますか?
- 18. Cではどのようにレジスタを使用していますか?
- 19. プログラムはここでどのようにスタックを使用していますか?
- 20. HaskellとFFIを使用してC enumとどのようにインタフェースしますか?
- 21. どのようにしてアンプキャッシュを使用できますか?
- 22. どのようにしてRefersToRangeを使用できますか?
- 23. Haskellではどのように状態を定義しますか?
- 24. Haskellで一時ディレクトリを使用するサブプロセスを実行するにはどうすればよいですか?
- 25. 私は、Haskellでシングルトンタイプを正しく考えて使用していますか?
- 26. haskellはどのようにして別のリストから新しいリストを作成しますか?
- 27. ListView.DataSourceはどのように使用されていますか?
- 28. オクターブデバッガはどのように使用されていますか?
- 29. RedirectToRouteはどのように使用されていますか?
- 30. Pythonではどのようにline.rstrip()を使用しますか?
私はそれはあなたが、その場合には何のあいまいさがないことから、 'TypeApplications'を使用する場合は(それを包摂するか、' TypedScopeVariables') 'ExplicitForAll'を使用することをお勧めだと思う:あなたは、例えば持っている場合'const :: forall a b。 a - > b - > a'の場合、最初の '@ ' - 引数は' a'のためのもので、 'b'のためのものです。 – Cactus
'ScopedTypeVariables' – dfeuer