Commit b8d21fd7 authored by Nicolas Lenz's avatar Nicolas Lenz
Browse files

Reorganize into Stack project, add executable, add new modes

parent aaa72728
......@@ -10,6 +10,8 @@ cabal-dev
*.dyn_hi
.hpc
.hsenv
# cabal file is auto-generated through Stack
*.cabal
.cabal-sandbox/
cabal.sandbox.config
*.prof
......
module Main where
import Mock
import Data.List
import Data.Char
import Data.Maybe
import System.Environment
main :: IO ()
main = do
args <- getArgs
case length args of
0 -> putStrLn help
1 -> putStrLn help
_ -> handle args
handle :: [String] -> IO ()
handle (mode:text) = transform (intercalate " " text) >>= putStrLn where
transform :: String -> IO String
transform = case lookup mode modes of
Just f -> f
Nothing -> const $ return help
modes :: [(String, String -> IO String)]
modes = [
("random", mockRandom),
("alternate", toIO mockAlternate),
("space", toIO $ mockSpace 1),
("space2", toIO $ mockSpace 2),
("space3", toIO $ mockSpace 3),
("upper", toIO $ map toUpper),
("lower", toIO $ map toLower)
]
toIO :: (a -> b) -> (a -> IO b)
toIO f = (\x -> return $ f x)
help :: String
help = "Mock - a program to transform text.\n\n\
\Usage: mock [STYLE] [TEXT]\n\
\Styles: " ++ (intercalate ", " $ map fst modes)
name: mock
version: 0.1.0
license: WTFPL
git: "https://git.eisfunke.com/software/mock"
author: "Nicolas Lenz"
maintainer: "nicolas@eisfunke.com"
copyright: "2018 Nicolas Lenz"
extra-source-files:
- README.md
# Metadata used when publishing your package
synopsis: GrEAt HAskeLL PrOGRaM to trANsForm tEXT
category: String
# 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://git.eisfunke.com/software/mock#readme>
dependencies:
- base >= 4.7 && < 5
library:
source-dirs: src
dependencies:
- base
- random
- time
executables:
mock-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- base
- mock
module Mock (mockAlternate, mockRandom) where
module Mock (mockAlternate, mockRandom, mockSpace) where
import Data.Char
import Data.List
import System.Random
import Data.Time.Clock.POSIX
toUpperBy :: String -> [Bool] -> String
toUpperBy (c:cs) (True:bs) = toUpper c : toUpperBy cs bs
toUpperBy (c:cs) (False:bs) = c : toUpperBy cs bs
......@@ -19,20 +20,5 @@ mockRandom str = do
time <- fmap round getPOSIXTime
return $ toUpperBy str $ randoms $ mkStdGen time
putMockAlternate :: String -> IO ()
putMockAlternate = putStrLn . mockAlternate
putMockRandom :: String -> IO ()
putMockRandom str = mockRandom str >>= putStrLn
main :: IO ()
main = do
args <- getArgs
case length args of
0 -> putStrLn ""
help :: String
help = "Mock - a program to transform text.\n\
\Usage: mock [STYLE] [TEXT]\n\
\Styles:"
mockSpace :: Int -> String -> String
mockSpace n = intercalate (replicate n ' ') . map (\c -> [c])
# 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-12.19
# 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
# - location:
# git: https://github.com/commercialhaskell/stack.git
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a
# subdirs:
# - auto-update
# - wai
packages:
- .
# Dependency packages to be pulled from upstream that are not in the resolver
# using the same syntax as the packages field.
# (e.g., acme-missiles-0.3)
# 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: ">=1.9"
#
# 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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment