2017-07-03 17 views
10

Javaでは、クラスからオブジェクト/インスタンスを作成できます。 Haskellでは 我々は型クラス、EXからのインスタンスを作ることができます:confused about function as instance of functor in haskell OBS::これは同じ問題ではありませんHaskellではインスタンスの意味は何ですか?

data ShirtSize = S | M | L  -- Here ShirtSize is a enum data-type 

class MyEq a where 
    (==) :: a -> a -> Bool 
instance MyEq ShirtSize where -- Here ShirtSize is an instance of the MyEq type-class 
    S == S = True 
    M == M = True 
    L == L = True 
    _ == _ = False 

私はどのようにFMAP作品を求めていないです、私はインスタンスdeclerationはHaskellで何を意味するかを求めています。

私の質問は haskellではどういう意味ですか? javaではクラスからインスタンスを作成できますが、インスタンスクラスはインスタンスクラスのような型(ShirtSizeなど)(たとえば、MyEqの(==)関数)をインスタンス化することができます。私は正しい?また、Javaのインスタンス/オブジェクトと比べてHaskellのインスタンスは何ですか?

+12

これはJavaの「インターフェイスの実装」のようなものです。 – Bergi

+3

あなたは "インスタンスは、(MyEqの(==)関数のような)型クラス関数を適用することができるタイプのインスタンス(ShirtSizeのようなタイプ)で釘付けにしたと思います。"それ以降の答えはほとんど残っていません。私たちが応答するときにコメントすることができないという混乱がありますか? –

+0

http://learnyouahaskell.com/making-our-own-types-and-typeclassesからのTypeclasses 102のセクションを読んでみてください。 –

答えて

12

:この質問を見てみましょう。クラスのインスタンスは、そのクラスに属する個々のオブジェクトです。

ハスケルでは、クラスシステムは、おおよそ同じようなグループタイプの方法です()。 (これが「型クラス」と呼ばれている理由です)。クラスのインスタンスは、そのクラスに属する個体です。 (つまり、マルチパラメータ型のクラスを検討するまで)。

ちなみに、ハスケル(モノパラメトリック)クラスは、Javaインターフェイスに似ており、拡張子はJavaクラスに似ています。あるいは、おそらくHaskellのインスタンスがJavaクラスに似ています。これを偶然として見る方が良いです。その用語の数学的起源を念頭に置いてアプローチする。クラスは一緒に属している単なる束であり、インスタンスはこれらのものの1つです。

5

タイプクラスの説明とJavaインターフェイスとの違いについては、this post by <❤>をお読みください。また、インスタンスについても説明します。

私の場合、私はinstanceというデータ型とインターフェイスの間の接続として見ています。 dataにはいくつかの情報が含まれており、classにはメソッドが含まれています。 dataは約データ(同語学のために申し訳ありません)であり、classは約の動作です。データ型を見ると、そのデータ型で何ができるのかわからず、そのデータ型が表示されます。 classを見ると、どのようなタイプができるべきかがわかりますが、内部で何が保存されているかは気にしません。実際のプログラミングでは、実装の詳細と、特定のデータを使用して実装されたメソッドについて実際に気にします。だからinstanceはちょうどいくつかのデータといくつかの振る舞いの関係を示しています。あなたはより多くの型クラスのモデルに興味を持っている場合には

は、このブログの記事を読む:あなたが値としてインスタンスを見ることができますhttp://www.haskellforall.com/2012/05/scrap-your-type-classes.html

!あなたがそのような定義に初めて直面するなら、あなたの心を吹き飛ばすかもしれません。

一部の依存型言語では、instancesは実際に他の関数に渡すことができる値です。クラスのシステムは、グループ同様のオブジェクトへの道である、Javaでは

In Idris, is "Eq a" a type, and can I supply a value for it?

関連する問題