On Wed, Jul 11, 2007 at 11:46:10PM +0200, Chaddaï Fouché wrote: > 2007/7/11, Stefan O'Rear <[EMAIL PROTECTED]>: >> >> Interestingly, the function is already there; it's called genericLength. >> >> However, the lazy natural type isn't. > > I'm not sure what you mean there : genericLength is just a length that > can return any Num (eg. an Integer) and not just Int, it has nothing > to do with what Andrew wanted, which was a function that checked if a > list was longer than n without swallowing more of the list than > necessary. > Is there something I misunderstood in the exchange ?
[EMAIL PROTECTED]:/tmp$ cat Z.hs
import List
data Nat = Z | S Nat deriving(Eq, Ord, Show)
instance Num Nat where
Z + x = x
S x + y = S (x + y)
Z * x = Z
S x * y = y + (x * y)
fromInteger 0 = Z
fromInteger (n+1) = S (fromInteger n)
main = print $ genericLength (1 : 2 : undefined) > (1 :: Nat)
[EMAIL PROTECTED]:/tmp$ runghc Z.hs
Z.hs:5:0:
Warning: No explicit method nor default method for `abs'
In the instance declaration for `Num Nat'
Z.hs:5:0:
Warning: No explicit method nor default method for `signum'
In the instance declaration for `Num Nat'
True
[EMAIL PROTECTED]:/tmp$
Stefan
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
