1
1
mirror of https://github.com/thma/WhyHaskellMatters.git synced 2024-11-22 03:26:24 +03:00

initial commit

This commit is contained in:
Thomas Mahler 2020-02-05 21:29:29 +01:00
parent 759b3f5b5c
commit 4a50430249
8 changed files with 174 additions and 0 deletions

2
.gitignore vendored
View File

@ -21,3 +21,5 @@ cabal.project.local
cabal.project.local~
.HTF/
.ghc.environment.*
*.cabal
stack.yaml.lock

2
Setup.hs Normal file
View File

@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain

6
app/Main.hs Normal file
View File

@ -0,0 +1,6 @@
module Main where
import Lib
main :: IO ()
main = someFunc

48
package.yaml Normal file
View File

@ -0,0 +1,48 @@
name: GentleIntroductionToHaskell
version: 0.1.0.0
github: "githubuser/GentleIntroductionToHaskell"
license: Apache-2.0
author: "Thomas Mahler"
maintainer: "thma@apache.org"
copyright: "2020 Thomas Mahler"
extra-source-files:
- README.md
# Metadata used when publishing your package
# synopsis: A gentle introduction to basic Haskell concepts
# category: Programming
# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/thma/GentleIntroductionToHaskell#readme>
dependencies:
- base >= 4.7 && < 5
- natural-numbers
library:
source-dirs: src
executables:
GentleIntroductionToHaskell-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- GentleIntroductionToHaskell
tests:
GentleIntroductionToHaskell-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- GentleIntroductionToHaskell

41
src/Functions.hs Normal file
View File

@ -0,0 +1,41 @@
module Functions where
import Data.Natural
-- take an Int as argument and compute its square
square :: Int -> Int
square x = x * x
-- take a tuple of two Ints and compute their product
mul :: (Int, Int) -> Int
mul (x, y) = x * y
-- add two numbers
add :: Int -> Int -> Int
add x y = x + y
-- partial application: applying add to 5 returns a function of type Int -> Int
add5 :: Int -> Int
add5 = add 5
-- The function curry takes a function of type ((a, b) -> c) and return the equivalent curried function of type a -> b -> c
-- curry :: ((a, b) -> c) -> a -> b -> c
curMul :: Int -> Int -> Int
curMul = curry mul
-- uncurry does the inverse, take the curried form and return the equivalent uncurried function
-- uncurry :: (a -> b -> c) -> (a, b) -> c
uncurAdd :: (Int, Int) -> Int
uncurAdd = uncurry add
-- recursive definition of factorial
factorial :: Natural -> Natural
factorial n =
if n == 0
then 1
else n * factorial (n - 1)
-- definition of factorial using pattern matching
fac :: Natural -> Natural
fac 0 = 1
fac n = n * fac (n - 1)

6
src/Lib.hs Normal file
View File

@ -0,0 +1,6 @@
module Lib
( someFunc
) where
someFunc :: IO ()
someFunc = putStrLn "someFunc"

67
stack.yaml Normal file
View File

@ -0,0 +1,67 @@
# This file was automatically generated by 'stack init'
#
# Some commonly used options have been documented as comments in this file.
# For advanced use and comprehensive documentation of the format, please see:
# https://docs.haskellstack.org/en/stable/yaml_configuration/
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
# A snapshot resolver dictates the compiler version and the set of packages
# to be used for project dependencies. For example:
#
# resolver: lts-3.5
# resolver: nightly-2015-09-21
# resolver: ghc-7.10.2
#
# The location of a snapshot can be provided as a file or url. Stack assumes
# a snapshot provided as a file might change, whereas a url resource does not.
#
# resolver: ./custom-snapshot.yaml
# resolver: https://example.com/snapshots/2018-01-01.yaml
resolver: lts-14.23
# User packages to be built.
# Various formats can be used as shown in the example below.
#
# packages:
# - some-directory
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
# subdirs:
# - auto-update
# - wai
packages:
- .
# Dependency packages to be pulled from upstream that are not in the resolver.
# These entries can reference officially published versions as well as
# forks / in-progress versions pinned to a git hash. For example:
#
extra-deps:
- natural-numbers-0.1.2.0@sha256:0fcbe1220979b83fa612fca73a1adb1a99ff43c84f9652b3ff32b2323309b43c,1407
# - acme-missiles-0.3
# - git: https://github.com/commercialhaskell/stack.git
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
#
# extra-deps: []
# Override default flag values for local packages and extra-deps
# flags: {}
# Extra package databases containing global packages
# extra-package-dbs: []
# Control whether we use the GHC we find on the path
# system-ghc: true
#
# Require a specific version of stack, using version ranges
# require-stack-version: -any # Default
# require-stack-version: ">=2.2"
#
# Override the architecture used by stack, especially useful on Windows
# arch: i386
# arch: x86_64
#
# Extra directories used by stack for building
# extra-include-dirs: [/path/to/dir]
# extra-lib-dirs: [/path/to/dir]
#
# Allow a newer minor version of GHC than the snapshot specifies
# compiler-check: newer-minor

2
test/Spec.hs Normal file
View File

@ -0,0 +1,2 @@
main :: IO ()
main = putStrLn "Test suite not yet implemented"