diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,7 @@
+20221120 haskell-dap-0.0.16.0
+  * [FIX] ISSUE#13 add Source Request and Response
+
+
 20210131 haskell-dap-0.0.15.0
 
   * [MODIFY] Support ghc-8.10.
diff --git a/haskell-dap.cabal b/haskell-dap.cabal
--- a/haskell-dap.cabal
+++ b/haskell-dap.cabal
@@ -1,4 +1,4 @@
-cabal-version: 1.12
+cabal-version: 1.12
 
 -- This file has been generated from package.yaml by hpack version 0.33.0.
 --
@@ -7,7 +7,7 @@
 -- hash: f4a728c6ff1db26ffb88719d91464f9cb9780e7ed22f636788b385fc1cd46041
 
 name:           haskell-dap
-version:        0.0.15.0
+version:        0.0.16.0
 synopsis:       Haskell implementation of the DAP interface data.
 description:    Please see README.md
 category:       Development
diff --git a/src/Haskell/DAP.hs b/src/Haskell/DAP.hs
--- a/src/Haskell/DAP.hs
+++ b/src/Haskell/DAP.hs
@@ -127,6 +127,14 @@
   , VariablesResponseBody(..)
   , defaultVariablesResponseBody
 
+  -- * source
+  , SourceRequest(..)
+  , SourceRequestArguments(..)
+  , SourceResponse(..)
+  , defaultSourceResponse
+  , SourceResponseBody(..)
+  , defaultSourceResponseBody
+
     -- * continue
   , ContinueRequest(..)
   , ContinueRequestArguments(..)
@@ -1442,6 +1450,77 @@
   , visibilityVariablePresentationHint :: String
   } deriving (Show, Read, Eq)
 
+
+----------------------------------------------------------------------------
+--  Source
+----------------------------------------------------------------------------
+
+-- |
+--   Source request; value of command field is "source".
+--
+--   Retrieves the content of the file which the debugger steps into.
+data SourceRequest = SourceRequest {
+    seqSourceRequest       :: Int                   -- ^Sequence number
+  , typeSourceRequest      :: String                -- ^One of "request", "response", or "event"
+  , commandSourceRequest   :: String                -- ^The command to execute
+  , argumentsSourceRequest :: SourceRequestArguments  -- ^Arguments for "source" request.
+  } deriving (Show, Read, Eq)
+
+
+-- |
+--   Arguments for 'source' request.
+--
+data SourceRequestArguments = SourceRequestArguments {
+    sourceSourceRequestArguments :: Maybe Source,
+    sourceReferenceSourceRequestArguments :: Int  -- ^Retrieve the content of thie source.
+  }
+  deriving (Show, Read, Eq)
+
+
+-- |
+--   Response to "source" request.
+--
+data SourceResponse = SourceResponse {
+    seqSourceResponse         :: Int     -- ^Sequence number
+  , typeSourceResponse        :: String  -- ^One of "request", "response", or "event"
+  , request_seqSourceResponse :: Int     -- ^Sequence number of the corresponding request
+  , successSourceResponse     :: Bool    -- ^Outcome of the request
+  , commandSourceResponse     :: String  -- ^The command requested
+  , messageSourceResponse     :: String  -- ^Contains error message if success == false.
+  , bodySourceResponse        :: SourceResponseBody  -- ^The body of VariablesResponse
+  } deriving (Show, Read, Eq)
+
+
+-- |
+--
+defaultSourceResponse :: SourceResponse
+defaultSourceResponse = SourceResponse {
+    seqSourceResponse = 0
+  , typeSourceResponse = "response"
+  , request_seqSourceResponse = 0
+  , successSourceResponse = False
+  , commandSourceResponse = "source"
+  , messageSourceResponse = ""
+  , bodySourceResponse = defaultSourceResponseBody
+  }
+
+
+-- |
+--   Response to "source" request.
+--
+data SourceResponseBody  = SourceResponseBody {
+    contentSourceResponseBody ::  String  -- ^Content of the requested source
+  , mimeTypeSourceResponseBody :: Maybe String -- ^Optional mimetype
+  } deriving (Show, Read, Eq)
+
+
+-- |
+--
+defaultSourceResponseBody :: SourceResponseBody
+defaultSourceResponseBody = SourceResponseBody {
+    contentSourceResponseBody = ""
+  , mimeTypeSourceResponseBody = Nothing
+  }
 
 
 ----------------------------------------------------------------------------
