Edit: See https://news.ycombinator.com/item?id=8797002 for an earlier discussion of the referenced paper.
239 karma · joined January 16, 2014
Edit: See https://news.ycombinator.com/item?id=8797002 for an earlier discussion of the referenced paper.
Then there are things like https://en.wikipedia.org/wiki/Parameter_identification_probl... and whole books like https://en.wikipedia.org/wiki/Causality_(book) examining the problem and its' difficulty.
Can you explain what you mean?
> The past half-century of empirical research on this issue has provided overwhelming and unambiguous evidence that minimal guidance during instruction is significantly less effective and efficient than guidance specifically designed to support the cognitive processing necessary for learning.
> Our understanding of the role of long-term memory in human cognition has altered dramatically over the last few decades. It is no longer seen as a passive repository of discrete, isolated fragments of information that permit us to repeat what we have learned. Nor is it seen only as a component of human cognitive architecture that has merely peripheral influence on complex cognitive processes such as thinking and problem solving. Rather, long-term memory is now viewed as the central, dominant structure of human cognition.
> These results suggest that expert problem solvers derive their skill by drawing on the extensive experience stored in their long-term memory and then quickly select and apply the best procedures for solving problems. The fact that these differences can be used to fully explain problem-solving skill emphasizes the importance of long-term memory to cognition. We are skillful in an area because our long-term memorycontains huge amounts of information concerning the area.
> The aim of all instruction is to alter long-term memory. If nothing has changed in long-term memory, nothing has been learned.
I'll quit there, but that's only a few pages in and it's all quite good and definitely worth reading IMO.
"Why Minimal Guidance During Instruction Does Not Work: An Analysis of the Failure of Constructivist, Discovery, Problem-Based, Experiential, and Inquiry-Based Teaching"
> Evidence for the superiority of guided instruction is explained in the context of our knowledge of human cognitive architecture, expert–novice differences, and cognitive load. Although unguided or minimally guided instructional approaches are very popular and intuitively appealing, the point is made that these approaches ignore both the structures that constitute human cognitive architecture and evidence from empirical studies over the past half-century that consistently indicate that minimally guided instruction is less effective and less efficient than instructional approaches that place a strong emphasis on guidance of the student learning process. The advantage of guidance begins to recede only when learners have sufficiently high prior knowledge to provide “internal” guidance. Recent developments in instructional research and instructional design models that support guidance during instruction are briefly described.
This all makes sense in light of the "human cognitive architecture". Working memory is severely limited while long-term memory is effectively unlimited. Thus, committing things to long-term memory frees up the scarce resource of working memory. In fact, there are many studies which indicate that the key differentiator between experts and novices is that they have a huge long-term store of schemata which can be applied in the problem domain and allow more efficient representation and manipulation in working memory.
This means these instances must be defined in standalone packages where they're necessarily orphans. The cultural prohibition against orphans means there aren't as many of these orphan instances packages as you'd like so you can end up redefining instances in every consumer project.
With the Hedgehog approach, there's no problem whatsoever with creating separate packages for these instances.
"He finds that codetermination laws are negatively associated with productivity, but profit sharing, worker ownership, and worker participation in decision making are all positively associated with productivity." ---http://library.uniteddiversity.coop/Money_and_Economics/Coop...
"The positive effects are found most uniformly with respect to profit sharing and, to a slightly lesser extent, individual capital (share) ownership and participation in decision-making by workers." ---https://www.sciencedirect.com/science/article/pii/0147596787...
This is one of the key themes of the book "Seeing Like a State". It describes many efforts by states to regularize their populace and make it "legible".
import Control.Monad.Free
import Control.Comonad.Cofree
import Data.Functor.Foldable
data A f
= ANil
| ACons f
type AList a = Cofree A a
a :: AList Int
a = 1 :< ACons (2 :< ACons (3 :< ANil))
data B a f
= B a f
type BList a = Free (B a) ()
b :: BList Int
b = Free (B 1 (Free (B 2 (Free (B 3 (Pure ()))))))
data C a f
= CCons a f
| CNil
type CList a = Fix (C a)
c :: CList Int
c = Fix (CCons 1 (Fix (CCons 2 (Fix (CCons 3 (Fix CNil))))))
You wanted to ensure it's non-empty? Something about the actual Comonad (extend, etc) interface?> All psychological traits show significant and substantial genetic influence
> I have more problems with the consequences of the FAM argument - that we inexorably ought to use all our life for the benefit of others if we profess to care for others at all. This, to me, is such an absurd consequence as to throw the entire enterprise of morality as a chain of material implication following from axioms (very attractive to a computer scientist!) into doubt.
This line of argument is called "the demandingness objection". There's a decent bit of philosophical literature under that heading.
If one embraces the implications of FAM rather than rejecting them, that probably ends up looking something like "effective altruism". (https://www.theguardian.com/world/2015/sep/22/extreme-altrui... is an article about effective altruism that seems relevant to your concerns)
Normal extensible effects looks like:
data Union :: [Type] -> Type -> Type where
...
data Free :: (Type -> Type) -> Type -> Type where
...
type Eff fs = Free (Union fs)
class Inject f fs where
inj :: f a -> Union fs a
data File :: Type -> Type where
Open :: FilePath -> File ()
Close :: FilePath -> File ()
send :: (Inject f fs) => f a -> Eff fs a
-- The inferred type would be more general
openClose :: Eff '[File] ()
openClose = do
send (Open "foo.txt")
send (Close "foo.txt")
You can then generalize this by also indexing everything: data HList :: [Type] -> Type where
Nil :: HList '[]
(:>) :: a -> HList as -> HList (a ': as)
data Union :: HList fs -> HList is -> HList is -> Type -> Type where
...
data Free :: (is -> is -> Type -> Type) -> is -> is -> Type -> Type where
...
type Eff fs = Free (Union fs)
class Inject f i o fs is os where
inj :: f i o a -> Union fs is os a
data FileStatus = Open | Closed
data File :: FileStatus -> FileStatus -> Type -> Type where
Open :: FilePath -> File 'Closed 'Open ()
Close :: FilePath -> File 'Open 'Closed ()
send :: (Inject f i o fs is os) => f i o a -> Eff fs is os a
-- The inferred type would be more general
openClose :: Eff (File ':> 'Nil) ('Closed ':> 'Nil) ('Closed ':> Nil) ()
openClose = do
send (Open "foo.txt")
send (Close "foo.txt")
Does that help at all?Intuitively, I like to think of it as:
- Extensible effects describe what we permit (read from console, print to console) - Indexed monads describe what we demand (you must auth before you can access db, you must open file before you can read it)
I'm actually working on doing a version of this in Haskell. You can see Oleg's version of it here: http://okmij.org/ftp/Haskell/extensible/ParamEff1.hs
I may have a more informed opinion after I read the states-all-the-way paper.
I come from a Haskell perspective and having one big blob of state sounds to me like it makes your type signatures less informative and increases the scope for error.