File: Feature80.hs

package info (click to toggle)
ghc 9.6.6-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 158,216 kB
  • sloc: haskell: 648,228; ansic: 81,656; cpp: 11,808; javascript: 8,444; sh: 5,831; fortran: 3,527; python: 3,277; asm: 2,523; makefile: 2,298; yacc: 1,570; lisp: 532; xml: 196; perl: 145; csh: 2
file content (47 lines) | stat: -rw-r--r-- 1,614 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Features.Feature80 ( main ) where

import           Control.Applicative            (pure)
import           Control.Monad.Identity
import           Data.List.NonEmpty
import           Data.Semigroup
import           Test.Tasty
import           Test.Tasty.HUnit

import           Text.Parsec

main :: TestTree
main =
  testCase "Monoid instance (#80)" $ do
    parseString (as <> bs) "aabbb" @?= "aabbb"
    parseString (mempty <> as) "aabbb" @?= "aa"
    parseString (as <> mempty) "aabbb" @?= "aa"
    parseString (sconcat $ fromList [as, mempty, bs]) "aabbb" @?= "aabbb"
    parseString (mconcat [as, mempty, bs]) "aabbb" @?= "aabbb"
    parseString (mempty :: ParsecT String () Identity String) "aabbb" @?= ""
    parseString (stimes (2::Int) str_a) "aabbb" @?= "aa"
    parseFail   (stimes (3::Int) str_a) "aabbb" @?= "no parse"
    parseString ((one ch_a) <> (one ch_a) <> bs) "aabbb" @?= "aabbb"

 where
   one = fmap pure

   as :: ParsecT String () Identity String
   as = many $ char 'a'
   bs :: ParsecT String () Identity String
   bs = many $ char 'b'
   ch_a :: ParsecT String () Identity Char
   ch_a = char 'a'
   str_a :: ParsecT String () Identity String
   str_a = string "a"

   parseString :: ParsecT String () Identity String -> String -> String
   parseString p input =
      case parse p "Example" input of
        Left{}    -> error "Parse failure"
        Right str -> str

   parseFail :: ParsecT String () Identity String -> String -> String
   parseFail p input =
      case parse p "Example" input of
        Left{}  -> "no parse"
        Right _ -> error "Parsed but shouldn't"