Sha256: 9cfec15e786bc6127ee0369f94b3f420624bc6852455b448ad0d2e1de470fc29

Contents?: true

Size: 786 Bytes

Versions: 277

Compression:

Stored size: 786 Bytes

Contents

{-# LANGUAGE OverloadedStrings #-}
module WordProblem (answer) where
import Data.Text (pack)
import Data.List (foldl')
import Control.Applicative ((<|>))
import Data.Attoparsec.Text
  ( Parser, signed, decimal, space, maybeResult, parse, many' )

answerParser :: Parser Int
answerParser = do
  n <- "What is " *> signed decimal
  ops <- many' (space *> operation)
  "?" *> pure (foldl' (flip ($)) n ops)

answer :: String -> Maybe Int
answer = maybeResult . parse answerParser . pack

operation :: Parser (Int -> Int)
operation = (flip <$> operator) <* space <*> signed decimal

operator :: Parser (Int -> Int -> Int)
operator = "plus"          *> pure (+) <|>
           "minus"         *> pure (-) <|>
           "multiplied by" *> pure (*) <|>
           "divided by"    *> pure div

Version data entries

277 entries across 277 versions & 1 rubygems

Version Path
trackler-2.2.1.59 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.58 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.57 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.56 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.55 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.54 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.53 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.52 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.51 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.50 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.49 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.48 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.47 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.46 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.45 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.44 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.43 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.42 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.41 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.40 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs