diff --git a/2023/haskell/.gitignore b/2023/haskell/.gitignore new file mode 100644 index 0000000..4c9e245 --- /dev/null +++ b/2023/haskell/.gitignore @@ -0,0 +1,23 @@ +dist +dist-* +cabal-dev +*.o +*.hi +*.hie +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc +.hsenv +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* diff --git a/2023/haskell/aoc2023.cabal b/2023/haskell/aoc2023.cabal new file mode 100644 index 0000000..cd16626 --- /dev/null +++ b/2023/haskell/aoc2023.cabal @@ -0,0 +1,130 @@ +cabal-version: 3.0 +-- The cabal-version field refers to the version of the .cabal specification, +-- and can be different from the cabal-install (the tool) version and the +-- Cabal (the library) version you are using. As such, the Cabal (the library) +-- version used must be equal or greater than the version stated in this field. +-- Starting from the specification version 2.2, the cabal-version field must be +-- the first thing in the cabal file. + +-- Initial package description 'aoc2023' generated by +-- 'cabal init'. For further documentation, see: +-- http://haskell.org/cabal/users-guide/ +-- +-- The name of the package. +name: aoc2023 + +-- The package version. +-- See the Haskell package versioning policy (PVP) for standards +-- guiding when and how versions should be incremented. +-- https://pvp.haskell.org +-- PVP summary: +-+------- breaking API changes +-- | | +----- non-breaking API additions +-- | | | +--- code changes with no API change +version: 0.0.0.1 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +-- The license under which the package is released. +license: MIT + +-- The file containing the license text. +license-file: LICENSE + +-- The package author(s). +author: Maciej Jur + +-- An email address to which users can send suggestions, bug reports, and patches. +maintainer: maciej@kamoshi.org + +-- A copyright notice. +-- copyright: +build-type: Simple + +-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README. +extra-doc-files: CHANGELOG.md + +-- Extra source files to be distributed with the package, such as examples, or a tutorial module. +-- extra-source-files: + +common warnings + ghc-options: -Wall + +library + -- Import common warning flags. + import: warnings + + -- Modules exported by the library. + exposed-modules: + Day01 + Day02 + + -- Modules included in this library but not exported. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + + -- Other library packages from which modules are imported. + build-depends: base ^>=4.17.2.0 + + -- Directories containing source files. + hs-source-dirs: src + + -- Base language which the package is written in. + default-language: Haskell2010 + +executable aoc2023 + -- Import common warning flags. + import: warnings + + -- .hs or .lhs file containing the Main module. + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + + -- Other library packages from which modules are imported. + build-depends: + base ^>=4.17.2.0, + aoc2023 + + -- Directories containing source files. + hs-source-dirs: app + + -- Base language which the package is written in. + default-language: Haskell2010 + +test-suite aoc2023-test + -- Import common warning flags. + import: warnings + + -- Base language which the package is written in. + default-language: Haskell2010 + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + + -- The interface type and version of the test suite. + type: exitcode-stdio-1.0 + + -- Directories containing source files. + hs-source-dirs: test + + -- The entrypoint to the test suite. + main-is: Main.hs + + -- Test dependencies. + build-depends: + base ^>=4.17.2.0, + HUnit ^>=1.6, + aoc2023 diff --git a/2023/haskell/app/Main.hs b/2023/haskell/app/Main.hs new file mode 100644 index 0000000..a4d7240 --- /dev/null +++ b/2023/haskell/app/Main.hs @@ -0,0 +1,8 @@ +module Main where + +import qualified Day01 (someFunc) + +main :: IO () +main = do + putStrLn "Hello, Haskell!" + MyLib.someFunc diff --git a/2023/haskell/src/Day01.hs b/2023/haskell/src/Day01.hs new file mode 100644 index 0000000..fdce4b5 --- /dev/null +++ b/2023/haskell/src/Day01.hs @@ -0,0 +1,4 @@ +module Day01 (someFunc) where + +someFunc :: IO () +someFunc = putStrLn "someFunc" diff --git a/2023/haskell/src/Day02.hs b/2023/haskell/src/Day02.hs new file mode 100644 index 0000000..94c607e --- /dev/null +++ b/2023/haskell/src/Day02.hs @@ -0,0 +1,4 @@ +module Day02 (xyz) where + +xyz :: Int -> Int +xyz = (+1) diff --git a/2023/haskell/test/Main.hs b/2023/haskell/test/Main.hs new file mode 100644 index 0000000..140ca35 --- /dev/null +++ b/2023/haskell/test/Main.hs @@ -0,0 +1,24 @@ +module Main (main) where + +import Test.HUnit +import qualified System.Exit as Exit +import qualified Day02 + + +day01 :: Test +day01 = TestCase $ assertEqual "should return 1" 1 (Day02.xyz 0) + +day02 :: Test +day02 = TestCase $ assertEqual "should return 0" 0 (Day02.xyz 0) + +tests :: Test +tests = TestList + [ TestLabel "day 1" day01 + , TestLabel "assda" day02 + ] + +main :: IO () +main = do + result <- runTestTT tests + if failures result > 0 then Exit.exitFailure else Exit.exitSuccess +