Movatterモバイル変換


[0]ホーム

URL:


{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE GADTs #-}{-# LANGUAGE ExplicitForAll #-}{-# LANGUAGE PatternSynonyms #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE TypeApplications #-}------------------------------------------------------------------------------- |-- Module      :  Data.Dynamic-- Copyright   :  (c) The University of Glasgow 2001-- License     :  BSD-style (see the file libraries/base/LICENSE)---- Maintainer  :  libraries@haskell.org-- Stability   :  experimental-- Portability :  portable---- The Dynamic interface provides basic support for dynamic types.---- Operations for injecting values of arbitrary type into-- a dynamically typed value, Dynamic, are provided, together-- with operations for converting dynamic values into a concrete-- (monomorphic) type.-------------------------------------------------------------------------------moduleData.Dynamic(-- * The @Dynamic@ typeDynamic(..),-- * Converting to and from @Dynamic@toDyn,fromDyn,fromDynamic,-- * Applying functions of dynamic typedynApply,dynApp,dynTypeRep,-- * Convenience re-exportsTypeable)whereimportData.Type.EqualityimportType.ReflectionimportData.MaybeimportGHC.BaseimportGHC.ShowimportGHC.Exception-----------------------------------------------------------------              The type Dynamic---------------------------------------------------------------{-|  A value of type 'Dynamic' is an object encapsulated together with its type.  A 'Dynamic' may only represent a monomorphic value; an attempt to  create a value of type 'Dynamic' from a polymorphically-typed  expression will result in an ambiguity error (see 'toDyn').  'Show'ing a value of type 'Dynamic' returns a pretty-printed representation  of the object\'s type; useful for debugging.-}dataDynamicwhereDynamic::foralla.TypeRepa->a->Dynamic-- | @since 2.01instanceShowDynamicwhere-- the instance just prints the type representation.showsPrec_(Dynamict_)=showString"<<".showsPrec0t.showString">>"-- here so that it isn't an orphan:-- | @since 4.0.0.0instanceExceptionDynamic-- Use GHC's primitive 'Any' type to hold the dynamically typed value.---- In GHC's new eval/apply execution model this type must not look-- like a data type.  If it did, GHC would use the constructor convention-- when evaluating it, and this will go wrong if the object is really a-- function.  Using Any forces GHC to use-- a fallback convention for evaluating it that works for all types.-- | Converts an arbitrary value into an object of type 'Dynamic'.---- The type of the object must be an instance of 'Typeable', which-- ensures that only monomorphically-typed objects may be converted to-- 'Dynamic'.  To convert a polymorphic object into 'Dynamic', give it-- a monomorphic type signature.  For example:---- >    toDyn (id :: Int -> Int)--toDyn::Typeablea=>a->DynamictoDynv=DynamictypeRepv-- | Converts a 'Dynamic' object back into an ordinary Haskell value of-- the correct type.  See also 'fromDynamic'.fromDyn::Typeablea=>Dynamic-- ^ the dynamically-typed object->a-- ^ a default value->a-- ^ returns: the value of the first argument, if-- it has the correct type, otherwise the value of-- the second argument.fromDyn(Dynamictv)def|JustHRefl<-t`eqTypeRep`typeOfdef=v|otherwise=def-- | Converts a 'Dynamic' object back into an ordinary Haskell value of-- the correct type.  See also 'fromDyn'.fromDynamic::foralla.Typeablea=>Dynamic-- ^ the dynamically-typed object->Maybea-- ^ returns: @'Just' a@, if the dynamically-typed-- object has the correct type (and @a@ is its value),-- or 'Nothing' otherwise.fromDynamic(Dynamictv)|JustHRefl<-t`eqTypeRep`rep=Justv|otherwise=Nothingwhererep=typeRep::TypeRepa-- (f::(a->b)) `dynApply` (x::a) = (f a)::bdynApply::Dynamic->Dynamic->MaybeDynamicdynApply(Dynamic(Funtatr)f)(Dynamicta'x)|JustHRefl<-ta`eqTypeRep`ta',JustHRefl<-typeRep@Type`eqTypeRep`typeRepKindtr=Just(Dynamictr(fx))dynApply__=NothingdynApp::Dynamic->Dynamic->DynamicdynAppfx=casedynApplyfxofJustr->rNothing->errorWithoutStackTrace("Type error in dynamic application.\n"++"Can't apply function "++showf++" to argument "++showx)dynTypeRep::Dynamic->SomeTypeRepdynTypeRep(Dynamictr_)=SomeTypeReptr

[8]ページ先頭

©2009-2025 Movatter.jp