Sha256: fff684e8107fb458324354d478469bb97b6450bdd0f5e19b4e9dd06c9f8d5e12

Contents?: true

Size: 786 Bytes

Versions: 119

Compression:

Stored size: 786 Bytes

Contents

{-# LANGUAGE OverloadedStrings #-}
module WordProblem (answer) where
import Data.Functor (($>))
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)
  "?" $> 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"          $> (+) <|>
           "minus"         $> (-) <|>
           "multiplied by" $> (*) <|>
           "divided by"    $> div

Version data entries

119 entries across 119 versions & 1 rubygems

Version Path
trackler-2.2.1.98 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.97 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.96 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.95 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.94 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.93 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.92 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.91 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.90 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.89 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.88 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.87 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.86 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.85 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.84 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.83 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.82 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.81 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.80 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.79 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs