@@ -14,15 +14,17 @@ import Type.Proxy (Proxy())
1414import qualified Data.ArrayBuffer.Types as A
1515
1616-- | Valid response types for an AJAX request. This is used to determine the
17- -- | `ResponseContent` type for a request.
18- data ResponseType
17+ -- | `ResponseContent` type for a request. The `a` type variable is a phantom
18+ -- | type used to associate the `ResponseType` with a particular instance of
19+ -- | `Respondable`.
20+ data ResponseType a
1921 = ArrayBufferResponse
2022 | BlobResponse
2123 | DocumentResponse
2224 | JSONResponse
2325 | StringResponse
2426
25- instance eqResponseType :: Eq ResponseType where
27+ instance eqResponseType :: Eq ( ResponseType a ) where
2628 (==) ArrayBufferResponse ArrayBufferResponse = true
2729 (==) BlobResponse BlobResponse = true
2830 (==) DocumentResponse DocumentResponse = true
@@ -31,14 +33,14 @@ instance eqResponseType :: Eq ResponseType where
3133 (==) _ _ = false
3234 (/=) x y = not (x == y)
3335
34- instance showResponseType :: Show ResponseType where
36+ instance showResponseType :: Show ( ResponseType a ) where
3537 show ArrayBufferResponse = " ArrayBufferResponse"
3638 show BlobResponse = " BlobResponse"
3739 show DocumentResponse = " DocumentResponse"
3840 show JSONResponse = " JSONResponse"
3941 show StringResponse = " StringResponse"
4042
41- responseTypeToString :: ResponseType -> String
43+ responseTypeToString :: forall a . ( ResponseType a ) -> String
4244responseTypeToString ArrayBufferResponse = " arraybuffer"
4345responseTypeToString BlobResponse = " blob"
4446responseTypeToString DocumentResponse = " document"
@@ -50,25 +52,25 @@ responseTypeToString StringResponse = "text"
5052type ResponseContent = Foreign
5153
5254class Respondable a where
53- responseType :: Proxy a -> ResponseType
55+ responseType :: ResponseType a
5456 fromResponse :: ResponseContent -> F a
5557
5658instance responsableBlob :: Respondable Blob where
57- responseType _ = BlobResponse
59+ responseType = BlobResponse
5860 fromResponse = unsafeReadTagged " Blob"
5961
6062instance responsableDocument :: Respondable Document where
61- responseType _ = DocumentResponse
63+ responseType = DocumentResponse
6264 fromResponse = unsafeReadTagged " Document"
6365
6466instance responsableJSON :: Respondable Foreign where
65- responseType _ = JSONResponse
67+ responseType = JSONResponse
6668 fromResponse = Right
6769
6870instance responsableString :: Respondable String where
69- responseType _ = StringResponse
71+ responseType = StringResponse
7072 fromResponse = readString
7173
7274instance responsableUnit :: Respondable Unit where
73- responseType _ = StringResponse
75+ responseType = StringResponse
7476 fromResponse = const (Right unit)
0 commit comments