packages feed

eros-0.5.2.0: README.md

# Eros

A Haskell library for text censorship, using
[DansGuardian Phraselists](http://contentfilter.futuragts.com/phraselists/).

I converted those Phraselists to JSON. You can see the converted Phraselists
[here](https://github.com/pharpend/eros/tree/master/res/phraselists-pretty). There
are
[compressed versions](https://github.com/pharpend/eros/tree/master/res/phraselists-ugly)
for use in your code.

Eros is still in development, and is not ready to be actually used. If you would
like to contribute, please do.

You can try the
[API documentation on Hackage](http://hackage.haskell.org/package/eros) if you
want to learn how to use the library. Hackage isn't terribly reliable at
successfully building the documentation, so I also publish the documentation on
[GitHub pages](https://pharpend.github.io/eros-haddock)

# Usage - v.0.5.2.0

This is a usage guide for version 0.5.2.0. There will be more up-to-date usage
guides as more versions come, hopefully.

To install, add `eros >=0.5 && <0.6` to the `build-depends` field in your
library's `.cabal` file

You can get all the functions, simply by `import`ing `Text.Eros`.

Hackage seems to be unable to build the API documentation for Eros, but it won't
hurt to check [eros on Hackage](http://hackage.haskell.org/package/eros).  If
that doesn't work, I publish the documentation
[here](https://pharpend.github.io/eros-haddock).

## Using `Text.Eros`

The basic idea is you take a `Message` type, and check it against a `PhraseMap`,
using `messageScore`. `Message` is actually just a type alias for `Tl.Text`, so
just enable the `OverloadedStrings` extension, and pretend you're using normal
strings.

In GHCi,

`:set -XOverloadedStrings`

`import Text.Eros`

In a file,

``` {.haskell}
 {-# LANGUAGE OverloadedStrings #-}
 import Text.Eros
```

### Constructing `PhraseMap`s

A `PhraseMap` is just a `Phraselist` marshaled into the more Haskell-friendly
`Ms.Map` type.

Eros provides a large number of `Phraselist`s.

``` {.haskell}
 data ErosList = Chat
               | Conspiracy
               | DrugAdvocacy
               | Forums
               | Gambling
               | Games
               | Gore
               | IdTheft
               | IllegalDrugs
               | Intolerance
               | LegalDrugs
               | Malware
               | Music
               | News
               | Nudism
               | Peer2Peer
               | Personals
               | Pornography
               | Proxies
               | SecretSocieties
               | SelfLabeling
               | Sport
               | Translation
               | UpstreamFilter
               | Violence
               | WarezHacking
               | Weapons
               | Webmail
   deriving (Eq)
```

The easiest way to marshal a `Phraselist` into a `PhraseMap` is to use the
`readPhraseMap` function.

``` {.haskell}
 readPhraseMap :: Phraselist t => t -> IO PhraseMap
```

Use it like this

`pornMap <- readPhraseMap Pornography`
`30`

Internally, `readPhraseMap` reads JSON data containing the `Phraselist`,
marshals it into a list of `PhraseAlmostTree`s, converts those into a
`PhraseForsest`, and then into a `PhraseMap`.

You can obviously use `mkMap` and `readPhraselist` to do it yourself, but it's a
lot easier to just use `readPhraseMap`.

You can then use `messageScore` to see the `Score` (actually an `Int`) of each
message.

`messageScore "Go fuck yourself." pornMap`

`messageScore` is not case sensitive, so `go fUck YoUrself` returns the same
score as `go fuck yourself`, and so on.

If you want to use multiple eros lists, do something like this

`let myLists = [Chat, Pornography, Weapons]`

`myMaps <- mapM readPhraseMap myLists`

`map (messageScore "Go fuck yourself") myMaps`
`[0, 30, 0]`

### Using your own phraselists

I haven't added *good* support in for this yet, but there still is support
nonetheless. Your phraselist needs to be in JSON, in accordance with the
Phraselist schema (I'm too lazy to find a link to it).

``` {.haskell}
 data MyList = MyList
 instance Phraselist MyList where
   phraselistPath MyList = "/path/to/phraselist"
```

You can then do the normal stuff with `messageScore` and `readPhraseMap`.

# Contributing

I would love if people would contribute. QuickCheck tests are desperately
needed.

As far as functionality goes, this library is pretty cut & dry. I already added
all of the features I envisioned.

# Versions

Eros is pretty heavy development, so the versions change quickly. I follow the
Hackage standard of `major.minor.even-more-minor.trivial`, where `major` and
`minor` entail API-breaking changes.

In the interest of not confusing myself, I keep Eros and the Eros Client on the
same `major.minor` version. So, a bump in the `major.minor` number doesn't
*necessarily* mean that there's an API-breaking change.

# Contact

The best way to contact me is via IRC. I hang out on `#archlinux` and `#haskell`
on FreeNode. My handles are `l0cust` and `isomorpheous`.