@@ -14,15 +14,17 @@ import Type.Proxy (Proxy())
14
14
import qualified Data.ArrayBuffer.Types as A
15
15
16
16
-- | 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
19
21
= ArrayBufferResponse
20
22
| BlobResponse
21
23
| DocumentResponse
22
24
| JSONResponse
23
25
| StringResponse
24
26
25
- instance eqResponseType :: Eq ResponseType where
27
+ instance eqResponseType :: Eq ( ResponseType a ) where
26
28
(==) ArrayBufferResponse ArrayBufferResponse = true
27
29
(==) BlobResponse BlobResponse = true
28
30
(==) DocumentResponse DocumentResponse = true
@@ -31,14 +33,14 @@ instance eqResponseType :: Eq ResponseType where
31
33
(==) _ _ = false
32
34
(/=) x y = not (x == y)
33
35
34
- instance showResponseType :: Show ResponseType where
36
+ instance showResponseType :: Show ( ResponseType a ) where
35
37
show ArrayBufferResponse = " ArrayBufferResponse"
36
38
show BlobResponse = " BlobResponse"
37
39
show DocumentResponse = " DocumentResponse"
38
40
show JSONResponse = " JSONResponse"
39
41
show StringResponse = " StringResponse"
40
42
41
- responseTypeToString :: ResponseType -> String
43
+ responseTypeToString :: forall a . ( ResponseType a ) -> String
42
44
responseTypeToString ArrayBufferResponse = " arraybuffer"
43
45
responseTypeToString BlobResponse = " blob"
44
46
responseTypeToString DocumentResponse = " document"
@@ -50,25 +52,25 @@ responseTypeToString StringResponse = "text"
50
52
type ResponseContent = Foreign
51
53
52
54
class Respondable a where
53
- responseType :: Proxy a -> ResponseType
55
+ responseType :: ResponseType a
54
56
fromResponse :: ResponseContent -> F a
55
57
56
58
instance responsableBlob :: Respondable Blob where
57
- responseType _ = BlobResponse
59
+ responseType = BlobResponse
58
60
fromResponse = unsafeReadTagged " Blob"
59
61
60
62
instance responsableDocument :: Respondable Document where
61
- responseType _ = DocumentResponse
63
+ responseType = DocumentResponse
62
64
fromResponse = unsafeReadTagged " Document"
63
65
64
66
instance responsableJSON :: Respondable Foreign where
65
- responseType _ = JSONResponse
67
+ responseType = JSONResponse
66
68
fromResponse = Right
67
69
68
70
instance responsableString :: Respondable String where
69
- responseType _ = StringResponse
71
+ responseType = StringResponse
70
72
fromResponse = readString
71
73
72
74
instance responsableUnit :: Respondable Unit where
73
- responseType _ = StringResponse
75
+ responseType = StringResponse
74
76
fromResponse = const (Right unit)
0 commit comments