├── 10 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ ├── Client │ │ │ │ │ ├── Auth.hs │ │ │ │ │ └── Common.hs │ │ │ │ ├── Server │ │ │ │ │ ├── Auth.hs │ │ │ │ │ ├── Common.hs │ │ │ │ │ └── Main.hs │ │ │ │ └── Types │ │ │ │ │ ├── AesonHelper.hs │ │ │ │ │ └── Auth.hs │ │ │ ├── Common.hs │ │ │ ├── Main.hs │ │ │ └── Web │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ ├── Main.hs │ │ │ │ └── static │ │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Config.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 11 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ ├── Client │ │ │ │ │ ├── Auth.hs │ │ │ │ │ └── Common.hs │ │ │ │ ├── Server │ │ │ │ │ ├── Auth.hs │ │ │ │ │ ├── Common.hs │ │ │ │ │ └── Main.hs │ │ │ │ └── Types │ │ │ │ │ ├── AesonHelper.hs │ │ │ │ │ └── Auth.hs │ │ │ ├── Common.hs │ │ │ ├── Main.hs │ │ │ └── Web │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ ├── Main.hs │ │ │ │ └── static │ │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Config.hs │ ├── Domain │ │ ├── Auth │ │ │ ├── Service.hs │ │ │ └── Types.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ ├── Adapter │ ├── HTTP │ │ ├── API │ │ │ └── Server │ │ │ │ └── AuthSpec.hs │ │ └── Fixture.hs │ ├── PostgreSQL │ │ └── AuthSpec.hs │ ├── RabbitMQ │ │ └── AuthSpec.hs │ └── Redis │ │ └── AuthSpec.hs │ ├── ConfigSpec.hs │ ├── Domain │ ├── Auth │ │ ├── ServiceSpec.hs │ │ └── TypesSpec.hs │ └── ValidationSpec.hs │ ├── Fixture.hs │ └── Spec.hs ├── 12 ├── .gitignore ├── .hlint.yaml ├── .hpc-threshold ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── build.sh ├── package.yaml ├── scripts │ ├── Dockerfile │ ├── build-docker.sh │ └── docker-compose.yml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ ├── Client │ │ │ │ │ ├── Auth.hs │ │ │ │ │ └── Common.hs │ │ │ │ ├── Server │ │ │ │ │ ├── Auth.hs │ │ │ │ │ ├── Common.hs │ │ │ │ │ └── Main.hs │ │ │ │ └── Types │ │ │ │ │ ├── AesonHelper.hs │ │ │ │ │ └── Auth.hs │ │ │ ├── Common.hs │ │ │ ├── Main.hs │ │ │ └── Web │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ ├── Main.hs │ │ │ │ └── static │ │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Config.hs │ ├── Domain │ │ ├── Auth │ │ │ ├── Service.hs │ │ │ └── Types.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ ├── Adapter │ ├── HTTP │ │ ├── API │ │ │ └── Server │ │ │ │ └── AuthSpec.hs │ │ └── Fixture.hs │ ├── PostgreSQL │ │ └── AuthSpec.hs │ ├── RabbitMQ │ │ └── AuthSpec.hs │ └── Redis │ │ └── AuthSpec.hs │ ├── ConfigSpec.hs │ ├── Domain │ ├── Auth │ │ ├── ServiceSpec.hs │ │ └── TypesSpec.hs │ └── ValidationSpec.hs │ ├── Fixture.hs │ └── Spec.hs ├── .gitattributes ├── 01 ├── Figure_1-1.png ├── Figure_1-2.png └── Figure_1-3.png ├── 02 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 03 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ └── InMemory │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 04 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ └── InMemory │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 05 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ └── Redis │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 06 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 07 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ └── Auth.hs │ │ │ ├── Common.hs │ │ │ └── Main.hs │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 08 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ └── Main.hs │ │ │ ├── Common.hs │ │ │ ├── Main.hs │ │ │ └── Web │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ ├── Main.hs │ │ │ │ └── static │ │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 09 ├── .gitignore ├── LICENSE ├── README.md ├── Setup.hs ├── app │ └── Main.hs ├── package.yaml ├── src │ ├── Adapter │ │ ├── HTTP │ │ │ ├── API │ │ │ │ ├── Client │ │ │ │ │ ├── Auth.hs │ │ │ │ │ └── Common.hs │ │ │ │ ├── Server │ │ │ │ │ ├── Auth.hs │ │ │ │ │ ├── Common.hs │ │ │ │ │ └── Main.hs │ │ │ │ └── Types │ │ │ │ │ ├── AesonHelper.hs │ │ │ │ │ └── Auth.hs │ │ │ ├── Common.hs │ │ │ ├── Main.hs │ │ │ └── Web │ │ │ │ ├── Auth.hs │ │ │ │ ├── Common.hs │ │ │ │ ├── Main.hs │ │ │ │ └── static │ │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── InMemory │ │ │ └── Auth.hs │ │ ├── PostgreSQL │ │ │ ├── Auth.hs │ │ │ └── Migrations │ │ │ │ └── 00000_auths.sql │ │ ├── RabbitMQ │ │ │ ├── Auth.hs │ │ │ └── Common.hs │ │ └── Redis │ │ │ └── Auth.hs │ ├── Domain │ │ ├── Auth.hs │ │ └── Validation.hs │ └── Lib.hs ├── stack.yaml └── test │ └── Spec.hs ├── 9781484237380.jpg ├── Contributing.md ├── LICENSE.txt └── README.md /.gitattributes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/.gitattributes -------------------------------------------------------------------------------- /01/Figure_1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/01/Figure_1-1.png -------------------------------------------------------------------------------- /01/Figure_1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/01/Figure_1-2.png -------------------------------------------------------------------------------- /01/Figure_1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/01/Figure_1-3.png -------------------------------------------------------------------------------- /02/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /02/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/LICENSE -------------------------------------------------------------------------------- /02/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /02/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /02/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/app/Main.hs -------------------------------------------------------------------------------- /02/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/package.yaml -------------------------------------------------------------------------------- /02/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/src/Lib.hs -------------------------------------------------------------------------------- /02/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/stack.yaml -------------------------------------------------------------------------------- /02/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/02/test/Spec.hs -------------------------------------------------------------------------------- /03/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /03/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/LICENSE -------------------------------------------------------------------------------- /03/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /03/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /03/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/app/Main.hs -------------------------------------------------------------------------------- /03/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/package.yaml -------------------------------------------------------------------------------- /03/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /03/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/src/Domain/Auth.hs -------------------------------------------------------------------------------- /03/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/src/Domain/Validation.hs -------------------------------------------------------------------------------- /03/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/src/Lib.hs -------------------------------------------------------------------------------- /03/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/stack.yaml -------------------------------------------------------------------------------- /03/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/03/test/Spec.hs -------------------------------------------------------------------------------- /04/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /04/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/LICENSE -------------------------------------------------------------------------------- /04/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /04/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /04/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/app/Main.hs -------------------------------------------------------------------------------- /04/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/package.yaml -------------------------------------------------------------------------------- /04/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /04/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/src/Domain/Auth.hs -------------------------------------------------------------------------------- /04/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/src/Domain/Validation.hs -------------------------------------------------------------------------------- /04/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/src/Lib.hs -------------------------------------------------------------------------------- /04/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/stack.yaml -------------------------------------------------------------------------------- /04/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/04/test/Spec.hs -------------------------------------------------------------------------------- /05/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /05/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/LICENSE -------------------------------------------------------------------------------- /05/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /05/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /05/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/app/Main.hs -------------------------------------------------------------------------------- /05/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/package.yaml -------------------------------------------------------------------------------- /05/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /05/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /05/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /05/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /05/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Domain/Auth.hs -------------------------------------------------------------------------------- /05/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Domain/Validation.hs -------------------------------------------------------------------------------- /05/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/src/Lib.hs -------------------------------------------------------------------------------- /05/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/stack.yaml -------------------------------------------------------------------------------- /05/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/05/test/Spec.hs -------------------------------------------------------------------------------- /06/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /06/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/LICENSE -------------------------------------------------------------------------------- /06/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /06/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /06/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/app/Main.hs -------------------------------------------------------------------------------- /06/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/package.yaml -------------------------------------------------------------------------------- /06/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /06/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /06/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /06/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /06/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /06/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /06/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Domain/Auth.hs -------------------------------------------------------------------------------- /06/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Domain/Validation.hs -------------------------------------------------------------------------------- /06/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/src/Lib.hs -------------------------------------------------------------------------------- /06/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/stack.yaml -------------------------------------------------------------------------------- /06/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/06/test/Spec.hs -------------------------------------------------------------------------------- /07/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /07/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/LICENSE -------------------------------------------------------------------------------- /07/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /07/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /07/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/app/Main.hs -------------------------------------------------------------------------------- /07/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/package.yaml -------------------------------------------------------------------------------- /07/src/Adapter/HTTP/API/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/HTTP/API/Auth.hs -------------------------------------------------------------------------------- /07/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /07/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /07/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /07/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /07/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /07/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /07/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /07/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /07/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Domain/Auth.hs -------------------------------------------------------------------------------- /07/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Domain/Validation.hs -------------------------------------------------------------------------------- /07/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/src/Lib.hs -------------------------------------------------------------------------------- /07/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/stack.yaml -------------------------------------------------------------------------------- /07/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/07/test/Spec.hs -------------------------------------------------------------------------------- /08/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /08/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/LICENSE -------------------------------------------------------------------------------- /08/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /08/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /08/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/app/Main.hs -------------------------------------------------------------------------------- /08/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/package.yaml -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/API/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/API/Auth.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/API/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/API/Common.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/API/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/API/Main.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Web/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Web/Auth.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Web/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Web/Common.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Web/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Web/Main.hs -------------------------------------------------------------------------------- /08/src/Adapter/HTTP/Web/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/HTTP/Web/static/images/logo.png -------------------------------------------------------------------------------- /08/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /08/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /08/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /08/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /08/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /08/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /08/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Domain/Auth.hs -------------------------------------------------------------------------------- /08/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Domain/Validation.hs -------------------------------------------------------------------------------- /08/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/src/Lib.hs -------------------------------------------------------------------------------- /08/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/stack.yaml -------------------------------------------------------------------------------- /08/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/08/test/Spec.hs -------------------------------------------------------------------------------- /09/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /09/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/LICENSE -------------------------------------------------------------------------------- /09/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /09/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /09/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/app/Main.hs -------------------------------------------------------------------------------- /09/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/package.yaml -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Client/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Client/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Client/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Client/Common.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Server/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Server/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Server/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Server/Common.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Server/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Server/Main.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Types/AesonHelper.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Types/AesonHelper.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/API/Types/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/API/Types/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Web/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Web/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Web/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Web/Common.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Web/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Web/Main.hs -------------------------------------------------------------------------------- /09/src/Adapter/HTTP/Web/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/HTTP/Web/static/images/logo.png -------------------------------------------------------------------------------- /09/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /09/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /09/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /09/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /09/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Domain/Auth.hs -------------------------------------------------------------------------------- /09/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Domain/Validation.hs -------------------------------------------------------------------------------- /09/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/src/Lib.hs -------------------------------------------------------------------------------- /09/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/stack.yaml -------------------------------------------------------------------------------- /09/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/09/test/Spec.hs -------------------------------------------------------------------------------- /10/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /10/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/LICENSE -------------------------------------------------------------------------------- /10/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /10/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /10/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/app/Main.hs -------------------------------------------------------------------------------- /10/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/package.yaml -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Client/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Client/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Client/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Client/Common.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Server/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Server/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Server/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Server/Common.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Server/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Server/Main.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Types/AesonHelper.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Types/AesonHelper.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/API/Types/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/API/Types/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Web/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Web/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Web/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Web/Common.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Web/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Web/Main.hs -------------------------------------------------------------------------------- /10/src/Adapter/HTTP/Web/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/HTTP/Web/static/images/logo.png -------------------------------------------------------------------------------- /10/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /10/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /10/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /10/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /10/src/Config.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Config.hs -------------------------------------------------------------------------------- /10/src/Domain/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Domain/Auth.hs -------------------------------------------------------------------------------- /10/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Domain/Validation.hs -------------------------------------------------------------------------------- /10/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/src/Lib.hs -------------------------------------------------------------------------------- /10/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/stack.yaml -------------------------------------------------------------------------------- /10/test/Spec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/10/test/Spec.hs -------------------------------------------------------------------------------- /11/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | .hspec-failures 3 | *.tix 4 | .DS_Store 5 | *.cabal 6 | -------------------------------------------------------------------------------- /11/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/LICENSE -------------------------------------------------------------------------------- /11/README.md: -------------------------------------------------------------------------------- 1 | # hauth 2 | -------------------------------------------------------------------------------- /11/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /11/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/app/Main.hs -------------------------------------------------------------------------------- /11/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/package.yaml -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Client/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Client/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Client/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Client/Common.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Server/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Server/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Server/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Server/Common.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Server/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Server/Main.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Types/AesonHelper.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Types/AesonHelper.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/API/Types/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/API/Types/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Web/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Web/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Web/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Web/Common.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Web/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Web/Main.hs -------------------------------------------------------------------------------- /11/src/Adapter/HTTP/Web/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/HTTP/Web/static/images/logo.png -------------------------------------------------------------------------------- /11/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /11/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /11/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /11/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /11/src/Config.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Config.hs -------------------------------------------------------------------------------- /11/src/Domain/Auth/Service.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Domain/Auth/Service.hs -------------------------------------------------------------------------------- /11/src/Domain/Auth/Types.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Domain/Auth/Types.hs -------------------------------------------------------------------------------- /11/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Domain/Validation.hs -------------------------------------------------------------------------------- /11/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/src/Lib.hs -------------------------------------------------------------------------------- /11/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/stack.yaml -------------------------------------------------------------------------------- /11/test/Adapter/HTTP/API/Server/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Adapter/HTTP/API/Server/AuthSpec.hs -------------------------------------------------------------------------------- /11/test/Adapter/HTTP/Fixture.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Adapter/HTTP/Fixture.hs -------------------------------------------------------------------------------- /11/test/Adapter/PostgreSQL/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Adapter/PostgreSQL/AuthSpec.hs -------------------------------------------------------------------------------- /11/test/Adapter/RabbitMQ/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Adapter/RabbitMQ/AuthSpec.hs -------------------------------------------------------------------------------- /11/test/Adapter/Redis/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Adapter/Redis/AuthSpec.hs -------------------------------------------------------------------------------- /11/test/ConfigSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/ConfigSpec.hs -------------------------------------------------------------------------------- /11/test/Domain/Auth/ServiceSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Domain/Auth/ServiceSpec.hs -------------------------------------------------------------------------------- /11/test/Domain/Auth/TypesSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Domain/Auth/TypesSpec.hs -------------------------------------------------------------------------------- /11/test/Domain/ValidationSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Domain/ValidationSpec.hs -------------------------------------------------------------------------------- /11/test/Fixture.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/11/test/Fixture.hs -------------------------------------------------------------------------------- /11/test/Spec.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS_GHC -F -pgmF hspec-discover #-} -------------------------------------------------------------------------------- /12/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/.gitignore -------------------------------------------------------------------------------- /12/.hlint.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/.hlint.yaml -------------------------------------------------------------------------------- /12/.hpc-threshold: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/.hpc-threshold -------------------------------------------------------------------------------- /12/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/LICENSE -------------------------------------------------------------------------------- /12/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/README.md -------------------------------------------------------------------------------- /12/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /12/app/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/app/Main.hs -------------------------------------------------------------------------------- /12/build.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/build.sh -------------------------------------------------------------------------------- /12/package.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/package.yaml -------------------------------------------------------------------------------- /12/scripts/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/scripts/Dockerfile -------------------------------------------------------------------------------- /12/scripts/build-docker.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/scripts/build-docker.sh -------------------------------------------------------------------------------- /12/scripts/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/scripts/docker-compose.yml -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Client/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Client/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Client/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Client/Common.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Server/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Server/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Server/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Server/Common.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Server/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Server/Main.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Types/AesonHelper.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Types/AesonHelper.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/API/Types/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/API/Types/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Common.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Main.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Web/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Web/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Web/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Web/Common.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Web/Main.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Web/Main.hs -------------------------------------------------------------------------------- /12/src/Adapter/HTTP/Web/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/HTTP/Web/static/images/logo.png -------------------------------------------------------------------------------- /12/src/Adapter/InMemory/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/InMemory/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/PostgreSQL/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/PostgreSQL/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/PostgreSQL/Migrations/00000_auths.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/PostgreSQL/Migrations/00000_auths.sql -------------------------------------------------------------------------------- /12/src/Adapter/RabbitMQ/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/RabbitMQ/Auth.hs -------------------------------------------------------------------------------- /12/src/Adapter/RabbitMQ/Common.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/RabbitMQ/Common.hs -------------------------------------------------------------------------------- /12/src/Adapter/Redis/Auth.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Adapter/Redis/Auth.hs -------------------------------------------------------------------------------- /12/src/Config.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Config.hs -------------------------------------------------------------------------------- /12/src/Domain/Auth/Service.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Domain/Auth/Service.hs -------------------------------------------------------------------------------- /12/src/Domain/Auth/Types.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Domain/Auth/Types.hs -------------------------------------------------------------------------------- /12/src/Domain/Validation.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Domain/Validation.hs -------------------------------------------------------------------------------- /12/src/Lib.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/src/Lib.hs -------------------------------------------------------------------------------- /12/stack.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/stack.yaml -------------------------------------------------------------------------------- /12/test/Adapter/HTTP/API/Server/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Adapter/HTTP/API/Server/AuthSpec.hs -------------------------------------------------------------------------------- /12/test/Adapter/HTTP/Fixture.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Adapter/HTTP/Fixture.hs -------------------------------------------------------------------------------- /12/test/Adapter/PostgreSQL/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Adapter/PostgreSQL/AuthSpec.hs -------------------------------------------------------------------------------- /12/test/Adapter/RabbitMQ/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Adapter/RabbitMQ/AuthSpec.hs -------------------------------------------------------------------------------- /12/test/Adapter/Redis/AuthSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Adapter/Redis/AuthSpec.hs -------------------------------------------------------------------------------- /12/test/ConfigSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/ConfigSpec.hs -------------------------------------------------------------------------------- /12/test/Domain/Auth/ServiceSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Domain/Auth/ServiceSpec.hs -------------------------------------------------------------------------------- /12/test/Domain/Auth/TypesSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Domain/Auth/TypesSpec.hs -------------------------------------------------------------------------------- /12/test/Domain/ValidationSpec.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Domain/ValidationSpec.hs -------------------------------------------------------------------------------- /12/test/Fixture.hs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/12/test/Fixture.hs -------------------------------------------------------------------------------- /12/test/Spec.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS_GHC -F -pgmF hspec-discover #-} -------------------------------------------------------------------------------- /9781484237380.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/9781484237380.jpg -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/Contributing.md -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/LICENSE.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/practical-webdev-haskell/HEAD/README.md --------------------------------------------------------------------------------