From e5f495348e10907883c99c28f89c1e13a8733845 Mon Sep 17 00:00:00 2001 From: Agatha Rose Date: Sat, 13 Mar 2021 17:00:20 +0200 Subject: [PATCH] initial commit! meowie!! --- .gitignore | 10 +++++ packages.dhall | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ spago.dhall | 9 ++++ src/Main.purs | 77 ++++++++++++++++++++++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 .gitignore create mode 100644 packages.dhall create mode 100644 spago.dhall create mode 100644 src/Main.purs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30efe19 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/bower_components/ +/node_modules/ +/.pulp-cache/ +/output/ +/generated-docs/ +/.psc-package/ +/.psc* +/.purs* +/.psa* +/.spago diff --git a/packages.dhall b/packages.dhall new file mode 100644 index 0000000..86d88c1 --- /dev/null +++ b/packages.dhall @@ -0,0 +1,110 @@ +{- +Welcome to your new Dhall package-set! + +Below are instructions for how to edit this file for most use +cases, so that you don't need to know Dhall to use it. + +## Warning: Don't Move This Top-Level Comment! + +Due to how `dhall format` currently works, this comment's +instructions cannot appear near corresponding sections below +because `dhall format` will delete the comment. However, +it will not delete a top-level comment like this one. + +## Use Cases + +Most will want to do one or both of these options: +1. Override/Patch a package's dependency +2. Add a package not already in the default package set + +This file will continue to work whether you use one or both options. +Instructions for each option are explained below. + +### Overriding/Patching a package + +Purpose: +- Change a package's dependency to a newer/older release than the + default package set's release +- Use your own modified version of some dependency that may + include new API, changed API, removed API by + using your custom git repo of the library rather than + the package set's repo + +Syntax: +where `entityName` is one of the following: +- dependencies +- repo +- version +------------------------------- +let upstream = -- +in upstream + with packageName.entityName = "new value" +------------------------------- + +Example: +------------------------------- +let upstream = -- +in upstream + with halogen.version = "master" + with halogen.repo = "https://example.com/path/to/git/repo.git" + + with halogen-vdom.version = "v4.0.0" +------------------------------- + +### Additions + +Purpose: +- Add packages that aren't already included in the default package set + +Syntax: +where `` is: +- a tag (i.e. "v4.0.0") +- a branch (i.e. "master") +- commit hash (i.e. "701f3e44aafb1a6459281714858fadf2c4c2a977") +------------------------------- +let upstream = -- +in upstream + with new-package-name = + { dependencies = + [ "dependency1" + , "dependency2" + ] + , repo = + "https://example.com/path/to/git/repo.git" + , version = + "" + } +------------------------------- + +Example: +------------------------------- +let upstream = -- +in upstream + with benchotron = + { dependencies = + [ "arrays" + , "exists" + , "profunctor" + , "strings" + , "quickcheck" + , "lcg" + , "transformers" + , "foldable-traversable" + , "exceptions" + , "node-fs" + , "node-buffer" + , "node-readline" + , "datetime" + , "now" + ] + , repo = + "https://github.com/hdgarrood/purescript-benchotron.git" + , version = + "v7.0.0" + } +------------------------------- +-} +let upstream = + https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210308/packages.dhall sha256:5a86da7913f6c84adc2efacfad49ca135af8f62235e7270d9b952a8dda3c4b47 + +in upstream diff --git a/spago.dhall b/spago.dhall new file mode 100644 index 0000000..ff5eacf --- /dev/null +++ b/spago.dhall @@ -0,0 +1,9 @@ +{- +Welcome to a Spago project! +You can edit this file as you like. +-} +{ name = "my-project" +, dependencies = [ "console", "effect", "lists", "psci-support", "strings" ] +, packages = ./packages.dhall +, sources = [ "src/**/*.purs", "test/**/*.purs" ] +} diff --git a/src/Main.purs b/src/Main.purs new file mode 100644 index 0000000..9880d16 --- /dev/null +++ b/src/Main.purs @@ -0,0 +1,77 @@ +module Main where + +import Prelude +import Effect (Effect) +import Effect.Console (log) +import Data.String.Common (joinWith, trim) +import Data.String.CodeUnits (length) +import Data.Array (replicate, mapWithIndex) +import Data.Array (length) as Array + +-- thanks to @lambdagrrl@computerfairi.es for help with this class +class UnescapeShow a where + unescapeShow :: a -> String + +instance stringShow :: UnescapeShow String where + unescapeShow = identity +else instance otherShow :: Show a => UnescapeShow a where + unescapeShow = show + +type Box + = { width :: Int + , kitties :: Int + } + +kitty = "/ᐠ。ꞈ。ᐟ\\" :: String + +-- how many chars of kitties will be printed before wrapping to next line +limit = 80 :: Int + +-- | repeats the specified string with a delimiter +repeat :: String -> Int -> String -> String +repeat delimiter num text = joinWith delimiter $ replicate num text + +-- | inserts a string after each Nth element of an array +insertAfterEach :: ∀ a. UnescapeShow a => Int -> String -> Array a -> Array String +insertAfterEach period input arr = mapWithIndex isModPeriod arr + where + isModPeriod index el + | ((index + 1) `mod` period == 0) = unescapeShow el <> input + | otherwise = unescapeShow el + +showKittens :: Box -> String +showKittens kittenbox = kittens <> "\n" <> box + where + -- an array of kitties of the specified size + rawKittens = replicate kittenbox.kitties kitty + + -- converts the char limit to the number of kittens + kittyLimit = (limit / length kitty) + + kittens = + " " + <> if (Array.length rawKittens > kittyLimit) then + -- split the string if it's too long + trim $ joinWith "" $ insertAfterEach kittyLimit "\n " rawKittens + else + joinWith "" rawKittens + + width = + if Array.length rawKittens > kittyLimit then + limit + else + kittenbox.width * length kittens + + -- prints the box that fluffy kitties will live in + box = + "\\" <> repeat "" width "_" <> "/" + <> "\n|" + <> repeat "" width "_" + <> "|" + +kittybox :: Box +kittybox = { kitties: 99, width: 1 } + +main :: Effect Unit +main = do + log (showKittens kittybox)