[ANN] fcf-containers 0.8.0 with helpers to get structures from type-level to term-level

Please do find version 0.8.0 of fcf-containers at fcf-containers: Data structures and algorithms for first-class-families and at Release v0.8.0 · gspia/fcf-containers · GitHub .

This version brings in support for better Text-type, if the ghc is 9.2.x or newer. Fcf-containers will keep the old text module for some time until the 9.2.x is more wide-spread and then the new version will take over.
At the same time, there are now modules for handling Char types at type level and updated Symbol module.

One thing worth mentioning separately is that the package now includes a “Reflect” module which helps to get type level Text, Trees, Maps and NatMaps to corresponding term level values. This means that text and container dependencies got in at the same time.

Here is an example from the tests:

import qualified Data.Tree as DT
import           Data.Proxy                                                                                             )
import qualified Fcf.Data.Tree as FT
import           Fcf.Data.Reflect
...
type ExT1r =
    'FT.Node 1
       '[ 'FT.Node 2
          '[ 'FT.Node 3 '[ 'FT.Node 4 '[]]]
        , 'FT.Node 5 '[ 'FT.Node 6 '[]]
        ]

testTree :: forall r. (r ~ ExT1r) => Bool
testTree = result == expected
  where
    result   = fromType @r Proxy :: DT.Tree Int
    expected = DT.Node 1 [DT.Node 2 [DT.Node 3 [DT.Node 4 []]], DT.Node 5 [DT.Node 6 []]]

Other good things have happened lately. Namely the contributor base doubled recently when compared to e.g. one year back. :grin: :crazy_face:

I’ll guess it is too much to hope to get it doubled again hahhaaa :crazy_face: , maybe in half time…

At least there would be quite nice things available for those who like this lib. E.g. the Text (or actually the NewText) module misses some nice methods (e.g. foldings). Also, the doctests could and should be moved to “tests”-directory. The doctests are a bit pain to get working nicely, if trying to support several GHC versions at the same time. As an extra motivation, the compiled tests work as nice examples and this move would allow cleaning up the actual implementation side a bit.

Further, the Reflect module probably could have more typical and often used instances. Now the package provides some so that they work as examples and hopefully they are also useful.

3 Likes