From 819f66ac79d4538ba967ab3a82adf6b896b51111 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 22:46:44 -0500 Subject: [PATCH 01/10] add haskell language and some basic categories/snippets --- public/icons/haskell.svg | 6 +++++ .../array-manipulation/binary-search.md | 27 +++++++++++++++++++ .../haskell/array-manipulation/chunk-array.md | 17 ++++++++++++ .../array-manipulation/flatten-array.md | 16 +++++++++++ .../array-manipulation/matrix-transpose.md | 18 +++++++++++++ .../array-manipulation/remove-duplicates.md | 19 +++++++++++++ snippets/haskell/basics/hello-world.md | 10 +++++++ snippets/haskell/icon.svg | 6 +++++ .../camelcase-to-snakecase.md | 21 +++++++++++++++ .../string-manipulation/capitalize-words.md | 21 +++++++++++++++ .../count-word-ocurrences.md | 18 +++++++++++++ .../string-manipulation/remove-punctuation.md | 18 +++++++++++++ .../snakecase-to-camelcase.md | 20 ++++++++++++++ .../string-manipulation/truncate-string.md | 19 +++++++++++++ 14 files changed, 236 insertions(+) create mode 100644 public/icons/haskell.svg create mode 100644 snippets/haskell/array-manipulation/binary-search.md create mode 100644 snippets/haskell/array-manipulation/chunk-array.md create mode 100644 snippets/haskell/array-manipulation/flatten-array.md create mode 100644 snippets/haskell/array-manipulation/matrix-transpose.md create mode 100644 snippets/haskell/array-manipulation/remove-duplicates.md create mode 100644 snippets/haskell/basics/hello-world.md create mode 100644 snippets/haskell/icon.svg create mode 100644 snippets/haskell/string-manipulation/camelcase-to-snakecase.md create mode 100644 snippets/haskell/string-manipulation/capitalize-words.md create mode 100644 snippets/haskell/string-manipulation/count-word-ocurrences.md create mode 100644 snippets/haskell/string-manipulation/remove-punctuation.md create mode 100644 snippets/haskell/string-manipulation/snakecase-to-camelcase.md create mode 100644 snippets/haskell/string-manipulation/truncate-string.md diff --git a/public/icons/haskell.svg b/public/icons/haskell.svg new file mode 100644 index 00000000..8163876f --- /dev/null +++ b/public/icons/haskell.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snippets/haskell/array-manipulation/binary-search.md b/snippets/haskell/array-manipulation/binary-search.md new file mode 100644 index 00000000..24be7973 --- /dev/null +++ b/snippets/haskell/array-manipulation/binary-search.md @@ -0,0 +1,27 @@ +--- +title: Binary Search +description: Searches for an element in a sorted array using binary search. +author: ACR1209 +tags: haskell,array,binary-search,search +--- + +```hs +binarySearch :: Ord a => a -> [a] -> Maybe Int +binarySearch _ [] = Nothing +binarySearch target xs = go 0 (length xs - 1) + where + go low high + | low> high = Nothing + | midElem < target = go (mid + 1) high + | midElem> target = go low (mid - 1) + | otherwise = Just mid + where + mid = (low + high) `div` 2 + midElem = xs !! mid + +main :: IO () +main = do + let array = [1, 2, 3, 4, 5] + print $ binarySearch 3 array -- Output: Just 2 + print $ binarySearch 6 array -- Output: Nothing +``` \ No newline at end of file diff --git a/snippets/haskell/array-manipulation/chunk-array.md b/snippets/haskell/array-manipulation/chunk-array.md new file mode 100644 index 00000000..6d85256e --- /dev/null +++ b/snippets/haskell/array-manipulation/chunk-array.md @@ -0,0 +1,17 @@ +--- +title: Chunk Array +description: Splits an array into chunks of a specified size. +author: ACR1209 +tags: haskell,array,chunk,utility +--- + +```hs +chunkArray :: Int -> [a] -> [[a]] +chunkArray _ [] = [] +chunkArray n xs = take n xs : chunkArray n (drop n xs) + +main :: IO () +main = do + let array = [1, 2, 3, 4, 5, 6] + print $ chunkArray 2 array -- Output: [[1, 2], [3, 4], [5, 6]] +``` \ No newline at end of file diff --git a/snippets/haskell/array-manipulation/flatten-array.md b/snippets/haskell/array-manipulation/flatten-array.md new file mode 100644 index 00000000..9be1cb27 --- /dev/null +++ b/snippets/haskell/array-manipulation/flatten-array.md @@ -0,0 +1,16 @@ +--- +title: Flatten Array +description: Flattens a multi-dimensional array. +author: ACR1209 +tags: haskell,array,flatten,utility +--- + +```hs +flatten :: [[a]] -> [a] +flatten = concat + +main :: IO () +main = do + let array = [[1, 2], [2], [3], [4]] + print $ flatten array -- Output: [1, 2, 2, 3, 4] +``` diff --git a/snippets/haskell/array-manipulation/matrix-transpose.md b/snippets/haskell/array-manipulation/matrix-transpose.md new file mode 100644 index 00000000..8bec051d --- /dev/null +++ b/snippets/haskell/array-manipulation/matrix-transpose.md @@ -0,0 +1,18 @@ +--- +title: Matrix Transpose +description: Transposes a 2D matrix. +author: ACR1209 +tags: haskell,array,matrix,transpose +--- + +```hs +transposeMatrix :: [[a]] -> [[a]] +transposeMatrix [] = [] +transposeMatrix ([]:_) = [] +transposeMatrix xs = map head xs : transposeMatrix (map tail xs) + +main :: IO () +main = do + let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] + print $ transposeMatrix matrix -- Output: [[1,4,7],[2,5,8],[3,6,9]] +``` \ No newline at end of file diff --git a/snippets/haskell/array-manipulation/remove-duplicates.md b/snippets/haskell/array-manipulation/remove-duplicates.md new file mode 100644 index 00000000..3af42fa8 --- /dev/null +++ b/snippets/haskell/array-manipulation/remove-duplicates.md @@ -0,0 +1,19 @@ +--- +title: Remove duplicates +description: Removes duplicate values from an array. +author: ACR1209 +tags: haskell,array,deduplicate,utility +--- + +```hs +import Data.List (nub) + +removeDuplicates :: Eq a => [a] -> [a] +removeDuplicates = nub + +-- Usage +main :: IO () +main = do + let array = [1, 2, 2, 3, 4, 4, 5] + print $ removeDuplicates array -- Output: [1, 2, 3, 4, 5] +``` diff --git a/snippets/haskell/basics/hello-world.md b/snippets/haskell/basics/hello-world.md new file mode 100644 index 00000000..a1da8874 --- /dev/null +++ b/snippets/haskell/basics/hello-world.md @@ -0,0 +1,10 @@ +--- +title: Hello, World! +description: Prints Hello, World! to the terminal. +author: ACR1209 +tags: haskell,printing,hello-world,utility +--- + +```haskell +putStrLn "Hello, World!" +``` diff --git a/snippets/haskell/icon.svg b/snippets/haskell/icon.svg new file mode 100644 index 00000000..8163876f --- /dev/null +++ b/snippets/haskell/icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/camelcase-to-snakecase.md b/snippets/haskell/string-manipulation/camelcase-to-snakecase.md new file mode 100644 index 00000000..c3c09a14 --- /dev/null +++ b/snippets/haskell/string-manipulation/camelcase-to-snakecase.md @@ -0,0 +1,21 @@ +--- +title: Transform Camel Case to Snake Case +description: Converts a Camel Case string to Snake case. +author: ACR1209 +tags: haskell,string,convert,camel-case,snake-case,utility +--- + +```hs +import Data.Char (isUpper, toLower) + +camelToSnake :: String -> String +camelToSnake [] = [] +camelToSnake (x:xs) + | isUpper x = '_' : toLower x : camelToSnake xs + | otherwise = x : camelToSnake xs + +main :: IO () +main = do + let camelCase = "camelCaseToSnakeCase" + print $ camelToSnake camelCase -- Output: "camel_case_to_snake_case" +``` \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/capitalize-words.md b/snippets/haskell/string-manipulation/capitalize-words.md new file mode 100644 index 00000000..dbf75c61 --- /dev/null +++ b/snippets/haskell/string-manipulation/capitalize-words.md @@ -0,0 +1,21 @@ +--- +title: Capitalize Words +description: Capitalizes the first letter of each word in a string. +author: ACR1209 +tags: haskell,string,capitalize,words +--- + +```hs +import Data.Char (toUpper) + +capitalizeWords :: String -> String +capitalizeWords = unwords . map capitalize . words + where + capitalize [] = [] + capitalize (x:xs) = toUpper x : xs + +main :: IO () +main = do + let sentence = "haskell is awesome" + print $ capitalizeWords sentence -- Output: "Haskell Is Awesome" +``` \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/count-word-ocurrences.md b/snippets/haskell/string-manipulation/count-word-ocurrences.md new file mode 100644 index 00000000..6c677631 --- /dev/null +++ b/snippets/haskell/string-manipulation/count-word-ocurrences.md @@ -0,0 +1,18 @@ +--- +title: Count Word Occurrences in String +description: Counts the occurrences of each word in a given string. +author: ACR1209 +tags: haskell,string,occurrences,word-count +--- + +```hs +import Data.List (group, sort) + +countWordOccurrences :: String -> [(String, Int)] +countWordOccurrences = map (\(w:ws) -> (w, length (w:ws))) . group . sort . words + +main :: IO () +main = do + let text = "haskell is awesome and haskell is fun" + print $ countWordOccurrences text -- Output: [("and",1),("awesome",1),("fun",1),("haskell",2),("is",2)] +``` \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/remove-punctuation.md b/snippets/haskell/string-manipulation/remove-punctuation.md new file mode 100644 index 00000000..64bc18be --- /dev/null +++ b/snippets/haskell/string-manipulation/remove-punctuation.md @@ -0,0 +1,18 @@ +--- +title: Remove Punctuation +description: Removes all punctuation from a given string. +author: ACR1209 +tags: haskell,string,punctuation,remove +--- + +```hs +import Data.Char (isPunctuation) + +removePunctuation :: String -> String +removePunctuation = filter (not . isPunctuation) + +main :: IO () +main = do + let text = "Hello, Haskell! How's it going?" + print $ removePunctuation text -- Output: "Hello Haskell Hows it going" +``` \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/snakecase-to-camelcase.md b/snippets/haskell/string-manipulation/snakecase-to-camelcase.md new file mode 100644 index 00000000..14664088 --- /dev/null +++ b/snippets/haskell/string-manipulation/snakecase-to-camelcase.md @@ -0,0 +1,20 @@ +--- +title: Transform from Snake Case to Camel Case +description: Converts a Snake Case string to Camel Case. +author: ACR1209 +tags: haskell,string,convert,snake-case,camel-case,utilty +--- + +```hs +import Data.Char (toUpper) + +snakeToCamel :: String -> String +snakeToCamel [] = [] +snakeToCamel ('_':x:xs) = toUpper x : snakeToCamel xs +snakeToCamel (x:xs) = x : snakeToCamel xs + +main :: IO () +main = do + let snakeCase = "snake_case_to_camel_case" + print $ snakeToCamel snakeCase -- Output: "snakeCaseToCamelCase" +``` \ No newline at end of file diff --git a/snippets/haskell/string-manipulation/truncate-string.md b/snippets/haskell/string-manipulation/truncate-string.md new file mode 100644 index 00000000..fe687d3c --- /dev/null +++ b/snippets/haskell/string-manipulation/truncate-string.md @@ -0,0 +1,19 @@ +--- +title: Truncate Strings +description: Truncates a string to a specified length, optionally adding an ellipsis. +author: ACR1209 +tags: haskell,string,truncate,utility +--- + +```hs +truncateString :: Int -> String -> String +truncateString maxLength str + | length str <= maxLength = str + | otherwise = take (maxLength - 3) str ++ "..." + +main :: IO () +main = do + let longString = "Haskell is a powerful functional programming language." + print $ truncateString 20 longString -- Output: "Haskell is a powe..." + print $ truncateString 54 longString -- Output: "Haskell is a powerful functional programming language." +``` \ No newline at end of file From 331371e17996d1890d6c1535e7a08818b0bf38ab Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 22:53:17 -0500 Subject: [PATCH 02/10] added haskell append to file snippet --- .../haskell/file-handling/append-to-file.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 snippets/haskell/file-handling/append-to-file.md diff --git a/snippets/haskell/file-handling/append-to-file.md b/snippets/haskell/file-handling/append-to-file.md new file mode 100644 index 00000000..ecdef843 --- /dev/null +++ b/snippets/haskell/file-handling/append-to-file.md @@ -0,0 +1,19 @@ +--- +title: Append to File +description: Appends text to an existing file. +author: ACR1209 +tags: haskell,file,append,utilty +--- + +```hs +import System.IO + +appendToFile :: FilePath -> String -> IO () +appendToFile = appendFile + +main :: IO () +main = do + let file = "example.txt" + let text = "This will be appended to the file.\n" + appendToFile file text +``` \ No newline at end of file From 123c169c1bd72fd50d4dbc347b520622f24bbda7 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 22:55:32 -0500 Subject: [PATCH 03/10] add Haskell snippet to check if a file exists --- snippets/haskell/file-handling/file-exists.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 snippets/haskell/file-handling/file-exists.md diff --git a/snippets/haskell/file-handling/file-exists.md b/snippets/haskell/file-handling/file-exists.md new file mode 100644 index 00000000..247761db --- /dev/null +++ b/snippets/haskell/file-handling/file-exists.md @@ -0,0 +1,19 @@ +--- +title: Check if File Exists +description: Checks if a file exists at a given path. +author: ACR1209 +tags: haskell,file,exists +--- + +```hs +import System.Directory (doesFileExist) + +checkFileExists :: FilePath -> IO Bool +checkFileExists = doesFileExist + +main :: IO () +main = do + let file = "example.txt" + exists <- checkFileExists file + if exists then putStrLn "File exists." else putStrLn "File does not exist." +``` \ No newline at end of file From f6465f4fee287dfd6f213a0b8b1779ac37df55a7 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 22:58:42 -0500 Subject: [PATCH 04/10] add Haskell snippet to find files in a directory by extension --- .../find-files-with-extension-in-directory.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 snippets/haskell/file-handling/find-files-with-extension-in-directory.md diff --git a/snippets/haskell/file-handling/find-files-with-extension-in-directory.md b/snippets/haskell/file-handling/find-files-with-extension-in-directory.md new file mode 100644 index 00000000..e9f4f9ce --- /dev/null +++ b/snippets/haskell/file-handling/find-files-with-extension-in-directory.md @@ -0,0 +1,23 @@ +--- +title: Find Files in Directory by Type +description: Finds all files in a directory with a specific extension. +author: ACR1209 +tags: haskell,file,search,extension,filesystem +--- + +```hs +import System.Directory (listDirectory) +import System.FilePath (takeExtension) + +findFilesByExtension :: FilePath -> String -> IO [FilePath] +findFilesByExtension dir ext = do + files <- listDirectory dir + return $ filter (\f -> takeExtension f == ext) files + +main :: IO () +main = do + let directory = "." + let ext = ".txt" + files <- findFilesByExtension directory ext + mapM_ putStrLn files -- Output: list of txt files on the current directory +``` \ No newline at end of file From db6808017c2135526b1eb3eabaa6e019d4ae8e60 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:07:53 -0500 Subject: [PATCH 05/10] add Haskell snippet to read a file in chunks by lines --- snippets/haskell/file-handling/read-chunks.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 snippets/haskell/file-handling/read-chunks.md diff --git a/snippets/haskell/file-handling/read-chunks.md b/snippets/haskell/file-handling/read-chunks.md new file mode 100644 index 00000000..d6844bd6 --- /dev/null +++ b/snippets/haskell/file-handling/read-chunks.md @@ -0,0 +1,29 @@ +--- +title: Read File in Chunks +description: Reads a file in chunks grouped by lines. +author: ACR1209 +tags: haskell,file,read,chunks,utility +--- + +```hs +import System.IO (openFile, IOMode(ReadMode), hGetContents) +import Data.List (unfoldr) + +readFileInChunks :: FilePath -> Int -> IO [[String]] +readFileInChunks filePath chunkSize = do + handle <- openFile filePath ReadMode + contents <- hGetContents handle + let linesList = lines contents + return $ go linesList + where + go [] = [] + go xs = take chunkSize xs : go (drop chunkSize xs) + +main :: IO () +main = do + let file = "example.txt" + let chunkSize = 3 -- Number of lines per chunk + chunks <- readFileInChunks file chunkSize + mapM_ (putStrLn . unlines) chunks + +``` \ No newline at end of file From c92a0412b2697b041762d313f28c62cd9cd46a6b Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:09:07 -0500 Subject: [PATCH 06/10] add Haskell snippet to write text to a file --- .../haskell/file-handling/write-to-file.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 snippets/haskell/file-handling/write-to-file.md diff --git a/snippets/haskell/file-handling/write-to-file.md b/snippets/haskell/file-handling/write-to-file.md new file mode 100644 index 00000000..33fed448 --- /dev/null +++ b/snippets/haskell/file-handling/write-to-file.md @@ -0,0 +1,19 @@ +--- +title: Write to File +description: Writes text to a file, overwriting any existing content. +author: ACR1209 +tags: haskell,file,write +--- + +```hs +import System.IO (writeFile) + +writeToFile :: FilePath -> String -> IO () +writeToFile = writeFile + +main :: IO () +main = do + let file = "example.txt" + let content = "This is new content." + writeToFile file content +``` \ No newline at end of file From 2c31172af5377befb71a1c5ee0c4b71fa6326ef3 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:15:55 -0500 Subject: [PATCH 07/10] add Haskell monad category and snippet of using the Maybe monad --- snippets/haskell/monads/maybe-monad.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 snippets/haskell/monads/maybe-monad.md diff --git a/snippets/haskell/monads/maybe-monad.md b/snippets/haskell/monads/maybe-monad.md new file mode 100644 index 00000000..4c33f856 --- /dev/null +++ b/snippets/haskell/monads/maybe-monad.md @@ -0,0 +1,20 @@ +--- +title: Maybe Monad +description: Using the Maybe monad to handle computations that might fail. +author: ACR1209 +tags: haskell, monads, maybe +--- + +```hs +safeDiv :: Int -> Int -> Maybe Int +safeDiv _ 0 = Nothing +safeDiv x y = Just (x `div` y) + +main :: IO () +main = do + let result = do + a <- safeDiv 10 2 + b <- safeDiv a 2 + return b + print result -- Output: Just 2 +``` \ No newline at end of file From 63ad862f416f2effe5ab20ae7c9374f325df0dfd Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:17:19 -0500 Subject: [PATCH 08/10] add Haskell snippet for Either monad to handle errors in computations --- snippets/haskell/monads/either-monad.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 snippets/haskell/monads/either-monad.md diff --git a/snippets/haskell/monads/either-monad.md b/snippets/haskell/monads/either-monad.md new file mode 100644 index 00000000..883a4c50 --- /dev/null +++ b/snippets/haskell/monads/either-monad.md @@ -0,0 +1,20 @@ +--- +title: Either Monad for Error Handling +description: Using the Either monad to handle errors in a computation. +author: ACR1209 +tags: haskell, monads, either, error handling +--- + +```hs +safeDiv :: Int -> Int -> Either String Int +safeDiv _ 0 = Left "Division by zero error" +safeDiv x y = Right (x `div` y) + +main :: IO () +main = do + let result = do + a <- safeDiv 10 2 + b <- safeDiv a 0 -- This will trigger an error + return b + print result -- Output: Left "Division by zero error" +``` \ No newline at end of file From f2ba64ad64d3e6e58bf5494e98dc6d7f43cfee64 Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:23:47 -0500 Subject: [PATCH 09/10] add Haskell snippet for Writer monad to accumulate logs alongside computations --- snippets/haskell/monads/writer-monad.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 snippets/haskell/monads/writer-monad.md diff --git a/snippets/haskell/monads/writer-monad.md b/snippets/haskell/monads/writer-monad.md new file mode 100644 index 00000000..f1b3ac97 --- /dev/null +++ b/snippets/haskell/monads/writer-monad.md @@ -0,0 +1,23 @@ +--- +title: Writer Monad +description: Using the Writer monad to accumulate logs or other outputs alongside a computation. +author: ACR1209 +tags: haskell, monads, writer, logs +--- + +```hs +import Control.Monad.Writer + +addAndLog :: Int -> Int -> Writer [String] Int +addAndLog x y = do + tell ["Adding " ++ show x ++ " and " ++ show y] + return (x + y) + +main :: IO () +main = do + let (result, logs) = runWriter $ do + res1 <- addAndLog 3 5 + addAndLog res1 1 + print result -- Output: 9 + print logs -- Output: ["Adding 3 and 5", "Adding 8 and 1"] +``` \ No newline at end of file From 7920cd5c241e365d14c5b8170416f736b4f9af9d Mon Sep 17 00:00:00 2001 From: ACR1209 Date: Wed, 1 Jan 2025 23:32:02 -0500 Subject: [PATCH 10/10] add Haskell snippet for State monad to manage mutable state --- snippets/haskell/monads/state-monad.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 snippets/haskell/monads/state-monad.md diff --git a/snippets/haskell/monads/state-monad.md b/snippets/haskell/monads/state-monad.md new file mode 100644 index 00000000..a723bb55 --- /dev/null +++ b/snippets/haskell/monads/state-monad.md @@ -0,0 +1,25 @@ +--- +title: State Monad +description: Managing mutable state using the State monad. +author: ACR1209 +tags: haskell, monads, state, state-management +--- + +```hs +import Control.Monad.State + +increment :: State Int Int +increment = do + count <- get + put (count + 1) + return count + +main :: IO () +main = do + let (res1, intermediateState) = runState increment 0 + print res1 -- Output: 0 + let (result, finalState) = runState increment intermediateState + print result -- Output: 1 + print finalState -- Output: 2 + +``` \ No newline at end of file

AltStyle によって変換されたページ (->オリジナル) /