• [^] # Re: Solution à base de types variants en ADA

    Posté par . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 3.

    Concernant les ranges, que dirais-tu du module Ranged-sets ?

    {-# LANGUAGE GeneralizedNewtypeDeriving #-}
    -- Module 'Ranged-sets'
    import Data.Ranged.Boundaries
    import Data.Ranged.Ranges
    import Data.Ranged.RangedSet
    newtype Fusées = F Integer deriving (Num, Ord, Eq, DiscreteOrdered, Show)
    class PrêtePourLaRampe a where
     délivrerFeuVert :: a -> RSet a
    instance PrêtePourLaRampe Fusées where
     délivrerFeuVert x = rSetIntersection
     ( makeRangedSet [Range (BoundaryBelow 0) (BoundaryAbove 10)] )
     ( rSingleton x )
    launchMissile'' :: Fusées -> Maybe String
    launchMissile'' x
     | not $ rSetIsEmpty $ délivrerFeuVert x = Just $ show x
     | otherwise = Nothing
    main :: IO()
    main = do
     putStrLn $ show $ launchMissile'' . F <$> [10, 0, 7, negate 11, 17]
     -- Si on n'a pas de GHC sous la main, les sorties devraient ressembler à ça:
     -- [Just "F 10",Just "F 0",Just "F 7",Nothing,Nothing]

    Ça semble ne pas être usine à gaz et ce petit exemple est plutôt lisible en n'ayant que quelques notions dans le langage.