packages feed

hix-0.9.0: lib/Hix/Managed/Handlers/AvailableVersions.hs

module Hix.Managed.Handlers.AvailableVersions where

import Hix.Data.Monad (M)
import Hix.Data.PackageName (PackageName)
import Hix.Data.Version (Version)

data AvailableVersionsHandlers =
  AvailableVersionsHandlers {
    all :: PackageName -> M [Version],
    latest :: PackageName -> M (Maybe Version)
  }

handlersNull :: AvailableVersionsHandlers
handlersNull =
  AvailableVersionsHandlers {
    all = const (pure []),
    latest = const (pure Nothing)
  }

handlersActionAll :: (PackageName -> M [Version]) -> AvailableVersionsHandlers
handlersActionAll fetch =
  AvailableVersionsHandlers {
    all = fetch,
    latest = fmap (head . sortOn Down) . fetch
  }

handlersActionOne :: (PackageName -> M (Maybe Version)) -> AvailableVersionsHandlers
handlersActionOne fetch =
  AvailableVersionsHandlers {
    all = fmap toList . fetch,
    latest = fetch
  }