Skip to content

Commit

Permalink
Complete StateT
Browse files Browse the repository at this point in the history
  • Loading branch information
Abhijit Sarkar committed Dec 30, 2024
1 parent 7c00943 commit ab96305
Show file tree
Hide file tree
Showing 19 changed files with 627 additions and 151 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ After this, we recommend the following progression of modules:
* [Monad](src/Monad.hs)
* [FileIO](src/FileIO.hs)
* [State](src/State.hs)
* StateT
* [StateT](src/StateT.hs)
* Extend
* Comonad
* Contravariant
Expand Down Expand Up @@ -59,7 +59,7 @@ To run a _specific test_:

To run a file containing a `main` method:
```
stack runhaskell app/Main.hs
stack runhaskell <path/to/file> <arg1> <arg2>
```

To run an executable listed in `package.yaml`:
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions data/files.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
data/a.txt
data/b.txt
data/c.txt
6 changes: 4 additions & 2 deletions fp-course-haskell.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ library
Monad
Optional
State
StateT
Validation
other-modules:
Paths_fp_course_haskell
Expand All @@ -37,7 +38,7 @@ library
TupleSections
DerivingStrategies
InstanceSigs
ghc-options: -Werror -Weverything -Wno-missing-import-lists -Wno-missed-specializations -Wno-all-missed-specializations -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe -Wno-implicit-prelude -Wno-prepositive-qualified-module -Wno-missing-kind-signatures -Wno-unused-top-binds -Wno-missing-export-lists -Wno-missing-role-annotations
ghc-options: -Werror -Weverything -Wno-missing-import-lists -Wno-missed-specializations -Wno-all-missed-specializations -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe -Wno-implicit-prelude -Wno-prepositive-qualified-module -Wno-missing-kind-signatures -Wno-unused-top-binds -Wno-missing-export-lists -Wno-missing-role-annotations -Wno-type-defaults
build-depends:
base >=4.7 && <5
, containers
Expand All @@ -55,6 +56,7 @@ test-suite fp-course-test
Property
SpecHook
StateSpec
StateTSpec
ValidationSpec
Paths_fp_course_haskell
hs-source-dirs:
Expand All @@ -63,7 +65,7 @@ test-suite fp-course-test
TupleSections
DerivingStrategies
InstanceSigs
ghc-options: -Werror -Weverything -Wno-missing-import-lists -Wno-missed-specializations -Wno-all-missed-specializations -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe -Wno-implicit-prelude -Wno-prepositive-qualified-module -Wno-missing-kind-signatures -Wno-unused-top-binds -Wno-missing-export-lists -Wno-missing-role-annotations
ghc-options: -Werror -Weverything -Wno-missing-import-lists -Wno-missed-specializations -Wno-all-missed-specializations -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe -Wno-implicit-prelude -Wno-prepositive-qualified-module -Wno-missing-kind-signatures -Wno-unused-top-binds -Wno-missing-export-lists -Wno-missing-role-annotations -Wno-type-defaults
build-depends:
QuickCheck
, base >=4.7 && <5
Expand Down
1 change: 1 addition & 0 deletions package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ ghc-options:
- -Wno-unused-top-binds
- -Wno-missing-export-lists
- -Wno-missing-role-annotations
- -Wno-type-defaults

library:
source-dirs: src
Expand Down
3 changes: 0 additions & 3 deletions share/files.txt

This file was deleted.

12 changes: 6 additions & 6 deletions src/FileIO.hs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ And c.txt, containing:
the contents of c
To test this module, load ghci in the root of the project directory, and do
>> :main "share/files.txt"
>> :main "data/files.txt"
Example output:
Expand All @@ -69,14 +69,14 @@ Loading ...
[ 1 of 28] Compiling (etc...
...
Ok, modules loaded: Course, etc...
>> :main "share/files.txt"
============ share/a.txt
>> :main "data/files.txt"
============ data/a.txt
the contents of a
============ share/b.txt
============ data/b.txt
the contents of b
============ share/c.txt
============ data/c.txt
the contents of c
-}
Expand Down Expand Up @@ -136,7 +136,7 @@ main :: IO ()
main =
L.getArgs >>= \case
filename :. Nil -> run filename
_ -> L.putStrLn "usage: stack runhaskell src/FileIO.hs share/files.txt"
_ -> L.putStrLn "usage: stack runhaskell src/FileIO.hs data/files.txt"

----

Expand Down
9 changes: 3 additions & 6 deletions src/State.hs
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,9 @@ firstRepeat xs = eval (findM contains xs) S.empty
contains :: (Ord a) => a -> State (Set a) Bool
contains x = do
seen <- get
if S.member x seen
then
A.pure True
else do
put (S.insert x seen)
A.pure False
let dup = S.member x seen
put $ S.insert x seen
A.pure dup

-- | Remove all duplicate elements in a `List`.
-- /Tip:/ Use `filtering` and `State` with a @Data.Set#Set@.
Expand Down
Loading

0 comments on commit ab96305

Please sign in to comment.