packages feed

huihua-0.1.0.1: src/Huihua/Examples.hs

{-# LANGUAGE QuasiQuotes #-}

module Huihua.Examples where

import Data.ByteString (ByteString)
import Data.String.Interpolate
import Data.Text.Encoding (encodeUtf8)

-- $setup
-- >>> :set -XOverloadedStrings
-- >>> :set -XQuasiQuotes
-- >>> import Prelude
-- >>> import Data.String.Interpolate
-- >>> import Huihua.Examples
-- >>> import Huihua.Parse as P
-- >>> import Harpie.Array as A
-- >>> import Data.List qualified as List
-- >>> import Data.ByteString.Char8 qualified as C
-- >>> import FlatParse.Basic
-- >>> import Data.Function ((&))
--
-- yet to be implemented
--
-- infinite and negative axes in reshape
--
-- multi-line arrays
--
-- >>> run nyiMultiArray
-- 7
-- 8
-- 9
--
--
-- ... format
-- >>> run [i|÷ 3 1|]
-- 0.3333333333333333
--
-- negate strand combination.
-- >>> run [i|¯2_¯2|]
-- ¯2
--
-- Implemented:
--
-- broadcasting scalars (and prefixed arrays?)
--
-- >>> run [i|<2 [1 2 3]|]
-- [1 0 0]
--
-- multi-dim bool reductions
-- >>> run [i|/<[2_1_0 0_4_3]|]
-- [1 0 0]
--
-- operators and stuff inside square brackets
--
-- >>> run "[. 1 2 3 4]"
-- [1 1 2 3 4]
--
-- display negate sign for numbers
--
-- >>> run [i|¯1|]
-- ¯1
--
-- strand square bracket combination
--
-- >>> run [i|[1_2 3_4 5_6]|]
-- ╭─
-- ╷ 1 2
--   3 4
--   5 6
--       ╯

-- |
--
-- >>> run exPage1
-- 4
exPage1 :: ByteString
exPage1 =
  encodeUtf8
    [i|
[1 5 8 2]
/+. \# Sum
⧻:  \# Length
÷   \# Divide
|]

-- |
--
-- >>> run exPage2
-- ╭─
-- ╷  0  1  2  3
-- ╷  4  5  6  7
--    8  9 10 11
-- ...
--   12 13 14 15
--   16 17 18 19
--   20 21 22 23
--               ╯
exPage2 :: ByteString
exPage2 =
  encodeUtf8
    [i|
2_3_4
/×. \# Product
⇡   \# Range
↯:  \# Reshape
|]

-- | character arrays not yet implemented.
--
-- >>> exPage3 & C.lines & fmap (runParser tokens)
-- [OK [] "",OK [GlyphToken String,NameToken "Unabashedly",NameToken "I",NameToken "utilize",NameToken "arrays",GlyphToken String] "",OK [GlyphToken NotEquals,CharacterToken ' ',GlyphToken Duplicate,CommentToken " Mask of non-spaces"] "",OK [GlyphToken Partition,GlyphToken First,CommentToken " All first letters"] ""]
exPage3 :: ByteString
exPage3 =
  [i|
"Unabashedly I utilize arrays"
≠@ . \# Mask of non-spaces
⊜⊢   \# All first letters
|]

nyiMultiArray :: ByteString
nyiMultiArray =
  [i|
[1 2 3
 4 5 6
 7 8 9]
|]