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.139 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.138 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.137 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.136 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.135 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.134 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.133 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.132 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.131 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.130 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.129 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.128 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.127 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.126 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.125 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.124 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.123 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.122 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.121 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs
trackler-2.2.1.120 tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs