セイと呼ばれ、そこからインスタンスを指定するには?より正確には、bがbのインスタンスからではなく、この型のクラスにある別の型である場合、fのインスタンスをaから指定する方法はありますか?どのようにすべてのインスタンスに対して、この型クラスのIは、関数、私はFを呼び出すことができますどのように</p> <pre class="lang-haskell prettyprint-override"><code>f :: [Bool] -> Maybe (a, [a]) </code></pre> <p>を持っていることを、私は、このようなタイプのクラスを持っている機能が
答えて
タイプアノテーションを追加する必要が生じることがあります。型クラスRead
を考えてみましょう:
class Read a where
read :: String -> a
あなたは整数1
を得ることを期待read "1"
をしようとするタイプa
が何であるかを知る方法はありませんので、あなたの代わりにエラーが発生します。ただし、これは動作します:read "1" :: Int
。
コンパイラがa
が何であるか把握できる状況で、関数f
を使用している場合、正常に動作します。それ以外の場合は、適切な型の注釈を追加してコンパイラを支援する必要があります。
typeclassインスタンスは、宣言されている特定の型によって索引付けされます。例えば、次のような場合には:
class YourClass a where
f :: [Bool] -> Maybe (a, [a])
instance YourClass Int where
f = error "Define me"
instance YourClass Char where
f = error "Define me"
YourClass
の2件のユニークなインスタンスがあります。 1つは、a
がInt
であるときにピックアップされ、もう1つがChar
であるときピックアップされます。インスタンスは、f
関数が実際に適用される型を使用して自動的に解決されます。
f
のように特定のシグニチャ[Bool] -> Maybe (Int, [Int])
がある場合はいつでも、Int
のインスタンスが自動的に取得されます。 Haskellも非常に強力な型推論を持っているので、この特定のシグネチャはほとんどの場合に指定する必要はなく、コンパイラはコンテキストから自動的に解決します。
基本的に、インスタンスを持っているすべての型でその関数を使い、残りの作業をコンパイラが安全に行うことができると期待しています。
他の回答を補足するために、実際にはあいまいなケースがあることを指摘したいと思います。例えば
:
class C a where
f :: String -> a
instance C Int where
f s = length s
instance C Bool where
f s = s == "hello!"
main :: IO()
main = print (f "testing")
今、print
が任意(Show
できる)タイプを受け付け、f "testing"
の両方Int
とBool
を生成することができます。これは、上記のプログラムが "False"と "7"を印刷する可能性があるため、本質的にあいまいです。コンパイラがそれを理解できる方法はありません。
解決策として、我々は
main = print (f "testing" :: Int)
-- or
main = print (f "testing" :: Bool)
を明確にするために使用することができます。あまり便利ではないもう1つの選択肢は、GHC 8でさえ、012Hである。上の右の拡張子を持つ0、
main = print (f @ Int "testing") -- explicit choice for type a
注しかし、いくつかの状況でそこには曖昧さがなく、GHCは驚異を行うことができます。例えば:&&
はBool
、およびlength
戻りInt
+
が同じ型を持つように二つの引数を強制しながら、を必要とするため
main = print (f "testing" && True) -- Bool is chosen here
main = print (f "testing" + length [1,2]) -- Int is chosen here
これは(そうf "testing"
も同様Int
でなければならない)です。
また、
bar :: Bool -> Float
bar b = ...
main = print (bar (f "testing)) -- Bool is chosen
- 1. がどのように要素を削除して、今、私はこのHTMLを解析したい私はこの</p> <pre><code>Hello<i class="emoji emoji_smile" title=":smile:"></i><i class="emoji emoji_angry" title=":angry:"></i>World </code></pre> <p>のようなHTMLスニペットを持って
- 2. 私はこのようなクラス<code>Category</code>を持って
- 3. どのように私はこのように、位置</em>の<em>リストを持っている
- 4. スカラ:ここ</p> <pre class="lang-py prettyprint-override"><code>def f((a, b)): return a + b d = (1, 2) f(d) </code></pre> <p>タプルに渡されては<code>f</code>に渡されながら分解されている:私はこれを行うことができますPythonで
- 5. は、どのように私は<strong>スウィフト3</strong>でこの機能を持っている
- 6. どのように私はこの1つのよう<code>Float</code>を持っているフロート
- 7. NGリピート:私はNGリピートを使用して、このようなテーブルを描きたい</p> <pre><code>{'A': 'L', 'B': 'L', 'C': 'G', 'D': 'L', 'E': 'G', 'F': 'L' } </code></pre> <p>、ここで</p> <pre><code>L G A C B E D F </code></pre> <p>:オブジェクト
- 8. PyQtは - 私はクリックすることができます</p> <pre><code>class Main(QtGui.QMainWindow): </code></pre> <p>を持って
- 9. は、私は、このようなクラスを持っているリスト<MyClass>
- 10. は、どのように私は、変数</p> <pre><code>int x = 2; </code></pre> <p>とリストを持っている
- 11. どのように私は私が始まるかどうかによってフィルタリングするbashの配列</p> <pre><code>X=("a" "b c" "-d" "k j", "-f") </code></pre> <p>があるとbashの配列
- 12. 私はこのような<code>ViewModel</code>持って右にShowDialog
- 13. Makefileコール機能。私は<code>$(call add_target, ...)</code>に提供されていることを、私はすべての引数のリストを取得することができますどのようにこの</p> <pre><code>define add_target ${1}: ${2} ${3} endef </code></pre> <p>のように、Makefileのカスタム関数を定義するときにどのようにすべての引数
- 14. は、私は、これはTであっても</p> <pre><code>f(List(1,2,3), "this is a string") </code></pre> <p>ため、エラーなしで動作し、次の関数に</p> <pre><code>def f[T](l:List[T], v:T) </code></pre> <p>を持って、正確にT
- 15. 私は、それはperlの</p> <p>私がいたを使用して行うことができますどのように</p> <pre><code>String sql = Query1; </code></pre> <p>のようにそれを交換したい行</p> <pre><code>String sql="select * from "+ "emp_data"; </code></pre> <p>のように私が持っている私のファイルでのPerl
- 16. どのように私は唯一の問題は、私はで指定できるようにしたいです</p> <pre><code>psql -d myDataBase -a -f myInsertFile.sql </code></pre> <p>...私はこのように私のデータベースに対してスクリプトを実行するPostgreSQLのコマンドライン
- 17. クラス宣言のBOOST_FILESYSTEM_DECLは何を意味していますか?</p> <pre><code>class BOOST_FILESYSTEM_DECL path { }; </code></pre> <p>通常クラスはこのように定義されています:</p> <pre><code>class Baloon { }; </code></pre> <p>どのように私はクラス宣言に2つの用語を持つことができます
- 18. は、私のような客観Cクラスを持って、</p> <pre><code>@interface message : NSObject { NSString *from; NSString *date; NSString *msg; } </code></pre> <p>私はこのメッセージクラスのインスタンスのNSMutableArrayのを持っているJSON文字列
- 19. 修正ポイント機能は<code>Control.Monad.State</code>、<code>fix :: (a -> a) -> a</code>から、私は<code>modifyValue</code>にこの小さなコードを持って、<code>fix</code>機能を理解するよう
- 20. アサーションが失敗したそれらのスレッドで</p> <pre><code>TEST(one, test_one) { vector<thread> threads // ... initialize threads } </code></pre> <p>とどこかを次のように私はテストケースを持っている場合は、どのように私はどのように実行中のすべてのスレッド
- 21. 私はJNI C++からこの関数を呼び出すにしたいどのように私は</p> <pre><code>public void OnResult(int i, ArrayList<String> a_strList); </code></pre> <p>のようなJavaの機能を持っているパラメータ
- 22. 私は<code>f</code></p> <pre><code>> argument_names(f) [1] "x" "y" </code></pre> <p>の引数名をできる取ることにしたい任意の関数についてはR機能
- 23. Pythonで改行を省略するには?私たちは、これが</p> <pre><code>a = 'strin' b = 2 print str(b)+a </code></pre> <p>を行うことができますどのように多くの方法:
- 24. MongoEngineは、私は、次のMongoEngineドキュメント</p> <pre><code>{ '_id': 'some_id', 'data': 'some_data' } </code></pre> <p>どのように私<code>delete</code>この文書がMongoEngineを使用することができている文書
- 25. 画像ここ</p> <p><a href="https://i.stack.imgur.com/jzYXW.png" rel="nofollow noreferrer">MG8ou.png</a></p> <p>私のコードに見られるように、私は、それが複数の番号を持っている場合の接触から電話を分離することができますどのように
- 26. 私は別の関数で、それに機能を追加している私は、この</p> <pre><code>private listeners: ((name: string) => void)[] = []; </code></pre> <p>のような機能の配列を持っている私は、活字体/ JavaScriptの</p> <p>に問題がbutton.onclick機能
- 27. は、どのように私はこの<code>Chart</code>を持っているスプラインや線
- 28. 私はMyValidator制約のConstraintValidatorでこの</p> <pre><code>@MyValidator class Demo { @NotNull Instant startDate ... } </code></pre> <p>のようなものであるクラスを持っていることに
- 29. 私はどのようにして、持ち上げられたR.divideに関数を渡すことができますか?これは<code>average</code>のpointfree実装として働く</p> <pre><code>var average = R.lift(R.divide)(R.sum, R.length) </code></pre> <p>どのように来る:
- 30. は私が</p> <pre><code>List[(String, Object)] </code></pre> <p>どのように私はこのリストをループ<code>for</code>を使用することができ、以下のようなサンプル<code>List</code>を持ってScalaの
え、 'Num'、' Read'ワーキング 'Show' ... – dfeuer
[OK]を、しかし、状況があり、これは曖昧されたときにアレント?たとえば、私の特定のケースでは、次のようなcase式でfを使いたいとします:case f xs of Nothing - > something ... Just(a、as)) - >何か... haskellはどのように私が知っていますか?を使用して? – user3726947
@ user3726947この式を持つ関数が特定の型 "a"を気にしない場合、それは多相関数であり、 'f2 ::(YourClass a)=> a - > ... ' –