Initial commit
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
.envrc
 | 
			
		||||
dist/
 | 
			
		||||
dist-newstyle/
 | 
			
		||||
							
								
								
									
										249
									
								
								.stylish-haskell.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								.stylish-haskell.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,249 @@
 | 
			
		||||
# stylish-haskell configuration file
 | 
			
		||||
# ==================================
 | 
			
		||||
 | 
			
		||||
# The stylish-haskell tool is mainly configured by specifying steps. These steps
 | 
			
		||||
# are a list, so they have an order, and one specific step may appear more than
 | 
			
		||||
# once (if needed). Each file is processed by these steps in the given order.
 | 
			
		||||
steps:
 | 
			
		||||
  # Convert some ASCII sequences to their Unicode equivalents. This is disabled
 | 
			
		||||
  # by default.
 | 
			
		||||
  # - unicode_syntax:
 | 
			
		||||
  #     # In order to make this work, we also need to insert the UnicodeSyntax
 | 
			
		||||
  #     # language pragma. If this flag is set to true, we insert it when it's
 | 
			
		||||
  #     # not already present. You may want to disable it if you configure
 | 
			
		||||
  #     # language extensions using some other method than pragmas. Default:
 | 
			
		||||
  #     # true.
 | 
			
		||||
  #     add_language_pragma: true
 | 
			
		||||
 | 
			
		||||
  # Align the right hand side of some elements.  This is quite conservative
 | 
			
		||||
  # and only applies to statements where each element occupies a single
 | 
			
		||||
  # line.
 | 
			
		||||
  - simple_align:
 | 
			
		||||
      cases: false
 | 
			
		||||
      top_level_patterns: false
 | 
			
		||||
      records: false
 | 
			
		||||
 | 
			
		||||
  # Import cleanup
 | 
			
		||||
  - imports:
 | 
			
		||||
      # There are different ways we can align names and lists.
 | 
			
		||||
      #
 | 
			
		||||
      # - global: Align the import names and import list throughout the entire
 | 
			
		||||
      #   file.
 | 
			
		||||
      #
 | 
			
		||||
      # - file: Like global, but don't add padding when there are no qualified
 | 
			
		||||
      #   imports in the file.
 | 
			
		||||
      #
 | 
			
		||||
      # - group: Only align the imports per group (a group is formed by adjacent
 | 
			
		||||
      #   import lines).
 | 
			
		||||
      #
 | 
			
		||||
      # - none: Do not perform any alignment.
 | 
			
		||||
      #
 | 
			
		||||
      # Default: global.
 | 
			
		||||
      align: none
 | 
			
		||||
 | 
			
		||||
      # The following options affect only import list alignment.
 | 
			
		||||
      #
 | 
			
		||||
      # List align has following options:
 | 
			
		||||
      #
 | 
			
		||||
      # - after_alias: Import list is aligned with end of import including
 | 
			
		||||
      #   'as' and 'hiding' keywords.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.List      as List (concat, foldl, foldr, head,
 | 
			
		||||
      #   >                                          init, last, length)
 | 
			
		||||
      #
 | 
			
		||||
      # - with_alias: Import list is aligned with start of alias or hiding.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.List      as List (concat, foldl, foldr, head,
 | 
			
		||||
      #   >                                 init, last, length)
 | 
			
		||||
      #
 | 
			
		||||
      # - new_line: Import list starts always on new line.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.List      as List
 | 
			
		||||
      #   >     (concat, foldl, foldr, head, init, last, length)
 | 
			
		||||
      #
 | 
			
		||||
      # Default: after_alias
 | 
			
		||||
      list_align: new_line
 | 
			
		||||
 | 
			
		||||
      # Right-pad the module names to align imports in a group:
 | 
			
		||||
      #
 | 
			
		||||
      # - true: a little more readable
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.List       as List (concat, foldl, foldr,
 | 
			
		||||
      #   >                                           init, last, length)
 | 
			
		||||
      #   > import qualified Data.List.Extra as List (concat, foldl, foldr,
 | 
			
		||||
      #   >                                           init, last, length)
 | 
			
		||||
      #
 | 
			
		||||
      # - false: diff-safe
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.List as List (concat, foldl, foldr, init,
 | 
			
		||||
      #   >                                     last, length)
 | 
			
		||||
      #   > import qualified Data.List.Extra as List (concat, foldl, foldr,
 | 
			
		||||
      #   >                                           init, last, length)
 | 
			
		||||
      #
 | 
			
		||||
      # Default: true
 | 
			
		||||
      pad_module_names: false
 | 
			
		||||
 | 
			
		||||
      # Long list align style takes effect when import is too long. This is
 | 
			
		||||
      # determined by 'columns' setting.
 | 
			
		||||
      #
 | 
			
		||||
      # - inline: This option will put as much specs on same line as possible.
 | 
			
		||||
      #
 | 
			
		||||
      # - new_line: Import list will start on new line.
 | 
			
		||||
      #
 | 
			
		||||
      # - new_line_multiline: Import list will start on new line when it's
 | 
			
		||||
      #   short enough to fit to single line. Otherwise it'll be multiline.
 | 
			
		||||
      #
 | 
			
		||||
      # - multiline: One line per import list entry.
 | 
			
		||||
      #   Type with constructor list acts like single import.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import qualified Data.Map as M
 | 
			
		||||
      #   >     ( empty
 | 
			
		||||
      #   >     , singleton
 | 
			
		||||
      #   >     , ...
 | 
			
		||||
      #   >     , delete
 | 
			
		||||
      #   >     )
 | 
			
		||||
      #
 | 
			
		||||
      # Default: inline
 | 
			
		||||
      long_list_align: new_line_multiline
 | 
			
		||||
 | 
			
		||||
      # Align empty list (importing instances)
 | 
			
		||||
      #
 | 
			
		||||
      # Empty list align has following options
 | 
			
		||||
      #
 | 
			
		||||
      # - inherit: inherit list_align setting
 | 
			
		||||
      #
 | 
			
		||||
      # - right_after: () is right after the module name:
 | 
			
		||||
      #
 | 
			
		||||
      #   > import Vector.Instances ()
 | 
			
		||||
      #
 | 
			
		||||
      # Default: inherit
 | 
			
		||||
      empty_list_align: inherit
 | 
			
		||||
 | 
			
		||||
      # List padding determines indentation of import list on lines after import.
 | 
			
		||||
      # This option affects 'long_list_align'.
 | 
			
		||||
      #
 | 
			
		||||
      # - <integer>: constant value
 | 
			
		||||
      #
 | 
			
		||||
      # - module_name: align under start of module name.
 | 
			
		||||
      #   Useful for 'file' and 'group' align settings.
 | 
			
		||||
      list_padding: 7
 | 
			
		||||
 | 
			
		||||
      # Separate lists option affects formatting of import list for type
 | 
			
		||||
      # or class. The only difference is single space between type and list
 | 
			
		||||
      # of constructors, selectors and class functions.
 | 
			
		||||
      #
 | 
			
		||||
      # - true: There is single space between Foldable type and list of it's
 | 
			
		||||
      #   functions.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import Data.Foldable (Foldable (fold, foldl, foldMap))
 | 
			
		||||
      #
 | 
			
		||||
      # - false: There is no space between Foldable type and list of it's
 | 
			
		||||
      #   functions.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import Data.Foldable (Foldable(fold, foldl, foldMap))
 | 
			
		||||
      #
 | 
			
		||||
      # Default: true
 | 
			
		||||
      separate_lists: false
 | 
			
		||||
 | 
			
		||||
      # Space surround option affects formatting of import lists on a single
 | 
			
		||||
      # line. The only difference is single space after the initial
 | 
			
		||||
      # parenthesis and a single space before the terminal parenthesis.
 | 
			
		||||
      #
 | 
			
		||||
      # - true: There is single space associated with the enclosing
 | 
			
		||||
      #   parenthesis.
 | 
			
		||||
      #
 | 
			
		||||
      #   > import Data.Foo ( foo )
 | 
			
		||||
      #
 | 
			
		||||
      # - false: There is no space associated with the enclosing parenthesis
 | 
			
		||||
      #
 | 
			
		||||
      #   > import Data.Foo (foo)
 | 
			
		||||
      #
 | 
			
		||||
      # Default: false
 | 
			
		||||
      space_surround: false
 | 
			
		||||
 | 
			
		||||
  # Language pragmas
 | 
			
		||||
  - language_pragmas:
 | 
			
		||||
      # We can generate different styles of language pragma lists.
 | 
			
		||||
      #
 | 
			
		||||
      # - vertical: Vertical-spaced language pragmas, one per line.
 | 
			
		||||
      #
 | 
			
		||||
      # - compact: A more compact style.
 | 
			
		||||
      #
 | 
			
		||||
      # - compact_line: Similar to compact, but wrap each line with
 | 
			
		||||
      #   `{-#LANGUAGE #-}'.
 | 
			
		||||
      #
 | 
			
		||||
      # Default: vertical.
 | 
			
		||||
      style: vertical
 | 
			
		||||
 | 
			
		||||
      # Align affects alignment of closing pragma brackets.
 | 
			
		||||
      #
 | 
			
		||||
      # - true: Brackets are aligned in same column.
 | 
			
		||||
      #
 | 
			
		||||
      # - false: Brackets are not aligned together. There is only one space
 | 
			
		||||
      #   between actual import and closing bracket.
 | 
			
		||||
      #
 | 
			
		||||
      # Default: true
 | 
			
		||||
      align: false
 | 
			
		||||
 | 
			
		||||
      # stylish-haskell can detect redundancy of some language pragmas. If this
 | 
			
		||||
      # is set to true, it will remove those redundant pragmas. Default: true.
 | 
			
		||||
      remove_redundant: true
 | 
			
		||||
 | 
			
		||||
  # Replace tabs by spaces. This is disabled by default.
 | 
			
		||||
  # - tabs:
 | 
			
		||||
  #     # Number of spaces to use for each tab. Default: 8, as specified by the
 | 
			
		||||
  #     # Haskell report.
 | 
			
		||||
  #     spaces: 8
 | 
			
		||||
 | 
			
		||||
  # Remove trailing whitespace
 | 
			
		||||
  - trailing_whitespace: {}
 | 
			
		||||
 | 
			
		||||
  # Squash multiple spaces between the left and right hand sides of some
 | 
			
		||||
  # elements into single spaces. Basically, this undoes the effect of
 | 
			
		||||
  # simple_align but is a bit less conservative.
 | 
			
		||||
  # - squash: {}
 | 
			
		||||
 | 
			
		||||
# A common setting is the number of columns (parts of) code will be wrapped
 | 
			
		||||
# to. Different steps take this into account. Default: 80.
 | 
			
		||||
columns: 80
 | 
			
		||||
 | 
			
		||||
# By default, line endings are converted according to the OS. You can override
 | 
			
		||||
# preferred format here.
 | 
			
		||||
#
 | 
			
		||||
# - native: Native newline format. CRLF on Windows, LF on other OSes.
 | 
			
		||||
#
 | 
			
		||||
# - lf: Convert to LF ("\n").
 | 
			
		||||
#
 | 
			
		||||
# - crlf: Convert to CRLF ("\r\n").
 | 
			
		||||
#
 | 
			
		||||
# Default: native.
 | 
			
		||||
newline: native
 | 
			
		||||
 | 
			
		||||
# Sometimes, language extensions are specified in a cabal file or from the
 | 
			
		||||
# command line instead of using language pragmas in the file. stylish-haskell
 | 
			
		||||
# needs to be aware of these, so it can parse the file correctly.
 | 
			
		||||
#
 | 
			
		||||
# No language extensions are enabled by default.
 | 
			
		||||
language_extensions:
 | 
			
		||||
  - RecordWildCards
 | 
			
		||||
  - TemplateHaskell
 | 
			
		||||
  - QuasiQuotes
 | 
			
		||||
  - LambdaCase
 | 
			
		||||
  - TupleSections
 | 
			
		||||
  - MultiParamTypeClasses
 | 
			
		||||
  - TypeApplications
 | 
			
		||||
  - DataKinds
 | 
			
		||||
  - TypeFamilies
 | 
			
		||||
  - FlexibleContexts
 | 
			
		||||
  - NamedFieldPuns
 | 
			
		||||
  - MultiWayIf
 | 
			
		||||
  - PolyKinds
 | 
			
		||||
  - ExplicitForAll
 | 
			
		||||
  - FunctionalDependencies
 | 
			
		||||
  - ExplicitNamespaces
 | 
			
		||||
  - ScopedTypeVariables
 | 
			
		||||
  - ExistentialQuantification
 | 
			
		||||
  - InstanceSigs
 | 
			
		||||
  - GeneralizedNewtypeDeriving
 | 
			
		||||
  - BangPatterns
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# Revision history for buuka
 | 
			
		||||
 | 
			
		||||
## 0.1.0.0 -- YYYY-mm-dd
 | 
			
		||||
 | 
			
		||||
* First version. Released on an unsuspecting world.
 | 
			
		||||
							
								
								
									
										30
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
Copyright (c) 2020, Mats Rauhala
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 | 
			
		||||
    * Redistributions of source code must retain the above copyright
 | 
			
		||||
      notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 | 
			
		||||
    * Redistributions in binary form must reproduce the above
 | 
			
		||||
      copyright notice, this list of conditions and the following
 | 
			
		||||
      disclaimer in the documentation and/or other materials provided
 | 
			
		||||
      with the distribution.
 | 
			
		||||
 | 
			
		||||
    * Neither the name of Mats Rauhala nor the names of other
 | 
			
		||||
      contributors may be used to endorse or promote products derived
 | 
			
		||||
      from this software without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
							
								
								
									
										8
									
								
								app/Main.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								app/Main.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
module Main where
 | 
			
		||||
 | 
			
		||||
import qualified MyLib (someFunc)
 | 
			
		||||
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = do
 | 
			
		||||
  putStrLn "Hello, Haskell!"
 | 
			
		||||
  MyLib.someFunc
 | 
			
		||||
							
								
								
									
										51
									
								
								buuka.cabal
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								buuka.cabal
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
cabal-version:       2.4
 | 
			
		||||
-- Initial package description 'buuka.cabal' generated by 'cabal init'.
 | 
			
		||||
-- For further documentation, see http://haskell.org/cabal/users-guide/
 | 
			
		||||
 | 
			
		||||
name:                buuka
 | 
			
		||||
version:             0.1.0.0
 | 
			
		||||
-- synopsis:
 | 
			
		||||
-- description:
 | 
			
		||||
-- bug-reports:
 | 
			
		||||
license:             BSD-3-Clause
 | 
			
		||||
license-file:        LICENSE
 | 
			
		||||
author:              Mats Rauhala
 | 
			
		||||
maintainer:          mats.rauhala@iki.fi
 | 
			
		||||
-- copyright:
 | 
			
		||||
category:            Web
 | 
			
		||||
extra-source-files:  CHANGELOG.md
 | 
			
		||||
 | 
			
		||||
library
 | 
			
		||||
  exposed-modules:     MyLib
 | 
			
		||||
  -- other-modules:
 | 
			
		||||
  -- other-extensions:
 | 
			
		||||
  build-depends:       base ^>=4.13.0.0
 | 
			
		||||
                     , aeson
 | 
			
		||||
                     , yaml
 | 
			
		||||
                     , mtl
 | 
			
		||||
                     , transformers
 | 
			
		||||
                     , unliftio-core
 | 
			
		||||
                     , conduit
 | 
			
		||||
                     , conduit-extra
 | 
			
		||||
  hs-source-dirs:      src
 | 
			
		||||
  default-language:    Haskell2010
 | 
			
		||||
 | 
			
		||||
executable buuka
 | 
			
		||||
  main-is:             Main.hs
 | 
			
		||||
  -- other-modules:
 | 
			
		||||
  -- other-extensions:
 | 
			
		||||
  build-depends:       base ^>=4.13.0.0, buuka
 | 
			
		||||
                     , optparse-applicative
 | 
			
		||||
  hs-source-dirs:      app
 | 
			
		||||
  default-language:    Haskell2010
 | 
			
		||||
 | 
			
		||||
test-suite buuka-test
 | 
			
		||||
  default-language:    Haskell2010
 | 
			
		||||
  type:                exitcode-stdio-1.0
 | 
			
		||||
  hs-source-dirs:      test
 | 
			
		||||
  main-is:             MyLibTest.hs
 | 
			
		||||
  build-depends:       base ^>=4.13.0.0
 | 
			
		||||
                     , buuka
 | 
			
		||||
                     , hedgehog
 | 
			
		||||
                     , tasty-hedgehog
 | 
			
		||||
                     , tasty
 | 
			
		||||
							
								
								
									
										18
									
								
								default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{ mkDerivation, aeson, base, conduit, conduit-extra, hedgehog, mtl
 | 
			
		||||
, optparse-applicative, stdenv, tasty, tasty-hedgehog, transformers
 | 
			
		||||
, unliftio-core, yaml
 | 
			
		||||
}:
 | 
			
		||||
mkDerivation {
 | 
			
		||||
  pname = "buuka";
 | 
			
		||||
  version = "0.1.0.0";
 | 
			
		||||
  src = ./.;
 | 
			
		||||
  isLibrary = true;
 | 
			
		||||
  isExecutable = true;
 | 
			
		||||
  libraryHaskellDepends = [
 | 
			
		||||
    aeson base conduit conduit-extra mtl transformers unliftio-core
 | 
			
		||||
    yaml
 | 
			
		||||
  ];
 | 
			
		||||
  executableHaskellDepends = [ base optparse-applicative ];
 | 
			
		||||
  testHaskellDepends = [ base hedgehog tasty tasty-hedgehog ];
 | 
			
		||||
  license = stdenv.lib.licenses.bsd3;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								shell.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								shell.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
with (import <nixpkgs> {});
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  buuka = haskellPackages.callPackage ./. {};
 | 
			
		||||
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
mkShell {
 | 
			
		||||
  name = "shell-buuka";
 | 
			
		||||
  buildInputs = [
 | 
			
		||||
    ghcid
 | 
			
		||||
    stylish-haskell
 | 
			
		||||
    cabal2nix
 | 
			
		||||
    haskellPackages.cabal-install
 | 
			
		||||
    (haskellPackages.ghcWithPackages (_: buuka.buildInputs ++ buuka.propagatedBuildInputs))
 | 
			
		||||
  ];
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								src/MyLib.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/MyLib.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
module MyLib (someFunc) where
 | 
			
		||||
 | 
			
		||||
someFunc :: IO ()
 | 
			
		||||
someFunc = putStrLn "someFunc"
 | 
			
		||||
							
								
								
									
										4
									
								
								test/MyLibTest.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								test/MyLibTest.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
module Main (main) where
 | 
			
		||||
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = putStrLn "Test suite not yet implemented."
 | 
			
		||||
		Reference in New Issue
	
	Block a user