在初学者看来,可以将Data.List.null
实现为:
null [] = True
null _ = False
查看Hackage中的实际来源,我看到:
null = foldr (\_ _ -> False) True
我觉得这很奇怪,我肯定错过了一些我应该学习的东西,但是什么呢?
答案 0 :(得分:15)
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null,
ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1",
null,
"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
是Foldable
类的一种方法:
null
您引用的实现是the default one,即使它们没有定义特定的实现,也适用于GHCi> :t null
null :: Foldable t => t a -> Bool
的所有实例:
Foldable
但list instance会覆盖默认实现:
class Foldable t where
-- etc.
null :: t a -> Bool
null = foldr (\_ _ -> False) True
-- etc.
instance Foldable [] where
-- etc.
null = List.null
-- etc.
反过来,is defined in GHC.List
以您期望的更简单的方式:
List.null