module Bindings.Stemmer.Simple
       ( Stemmer(..)
       , Language(..)
       , Encoding(..)
       , init_stemmer
       , simple_stem ) where

import Bindings.Stemmer (StemConfig(..), Stemmer(..),
                         Language(..), Encoding(..),
                         init_stemmer, new_stemmer,
                         delete_stemmer, stemword)
import Control.Monad.Trans.Resource (allocate, runResourceT, release)
import Control.Monad.Trans.Class (lift)

-- | stem word with 'ResourceT'.
--
--  new & delete 'Stemmer' a.k.a (Ptr C'sb_stemmer) automatically.
simple_stem :: StemConfig -> String -> IO String
simple_stem StemConfig{..} word = runResourceT $ do
  (key, stemmer) <- allocate (new_stemmer StemConfig{..}) delete_stemmer
  str <- lift $ stemword stemmer word
  lift $ release key
  return str