From 3ac7657c591da8c12909fd3a5eb3b07d835c8e93 Mon Sep 17 00:00:00 2001 From: PHO Date: Fri, 23 Apr 2010 19:14:02 +0900 Subject: [PATCH] HAllable --- Data/HList/Prelude.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Data/HList/Prelude.hs b/Data/HList/Prelude.hs index c63be3a..d9ee19a 100644 --- a/Data/HList/Prelude.hs +++ b/Data/HList/Prelude.hs @@ -27,12 +27,14 @@ module Data.HList.Prelude , HFoldrable(..) , HConcatable(..) , HMappable(..) + , HAllable(..) , HLength ) where import Data.Typeable +import Types.Data.Bool import Types.Data.Num hiding ((:*:)) @@ -157,6 +159,26 @@ instance ( Applyable f x type HMap f (HCons x xs) = HCons (Apply f x) (HMap f xs) hMap f (HCons x xs) = hCons (apply f x) (hMap f xs) +-- HAllable +class HAllable f l where + type HAll f l + hAll :: f -> l -> HAll f l + +instance HAllable f HNil where + type HAll f HNil = True + hAll _ _ = undefined :: True + +instance ( IfT (Apply f x) (HAll f xs) False + , Applyable f x + , HAllable f xs + ) => HAllable f (HCons x xs) where + type HAll f (HCons x xs) = If (Apply f x) + (HAll f xs) + False + hAll f (HCons x xs) = ifT (apply f x) + (hAll f xs) + (undefined :: False) + -- HLength type family HLength l type instance HLength HNil = D0 -- 2.40.0