{- HLINT ignore "Unused LANGUAGE pragma" -}
{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}

{-# LANGUAGE NoUndecidableInstances #-}
{-# LANGUAGE PatternSynonyms        #-}

{- |
Copyright: (c) 2020 Kowainik
SPDX-License-Identifier: MPL-2.0
Maintainer: Kowainik <xrom.xkov@gmail.com>

Module that contains code that should trigger various beautiful Stan inspections :)
-}

module Stan.Example () where

import System.FilePath ((</>))

import qualified Data.ByteString.Char8 as BS8
import qualified Data.List as P
import qualified Text.Read as P


mkMyUrlPart :: String -> String
mkMyUrlPart :: String -> String
mkMyUrlPart myUrl :: String
myUrl = String
myUrl String -> String -> String
</> "asd"

pairLength :: Int
pairLength :: Int
pairLength = (Int, Int) -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length ((1, 2) :: (Int, Int))

listIndxs :: [a] -> [Int]
listIndxs :: [a] -> [Int]
listIndxs xs :: [a]
xs = [0 .. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
xs]

toByteString :: String -> BS8.ByteString
toByteString :: String -> ByteString
toByteString = String -> ByteString
BS8.pack

pathToX :: FilePath -> FilePath
pathToX :: String -> String
pathToX x :: String
x = "src/lib" String -> String -> String
</> String
x

getFirstIPromise :: [a] -> a
getFirstIPromise :: [a] -> a
getFirstIPromise = [a] -> a
forall a. [a] -> a
P.head

parseInt :: String -> Int
parseInt :: String -> Int
parseInt = String -> Int
forall a. Read a => String -> a
P.read

quad :: Int -> (Int, Int, Int, Int)
quad :: Int -> (Int, Int, Int, Int)
quad x :: Int
x = (Int
x, Int
x, Int
x, Int
x)

(?+?) :: Int -> Int -> Int
?+? :: Int -> Int -> Int
(?+?) = Int -> Int -> Int
forall a. Num a => a -> a -> a
(+)

isEq :: Int -> Int -> Bool
isEq :: Int -> Int -> Bool
isEq x :: Int
x y :: Int
y
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
y = Bool
False
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
y = Bool
False
    | Bool
otherwise = Bool
True

prettyOrdering :: Ordering -> String
prettyOrdering :: Ordering -> String
prettyOrdering = \case {GT -> "GT"; _ -> "LT"}

data User = User
    { User -> String
userName :: !String
    , User -> Int
userAge  :: Int
    }